2009-04-30 9 views
3

Ich hole Daten (Bilder, 200-400kb) vom WCF-Dienst zum Silverlight-Client und stelle fest, dass das Silverlight jedes Mal für einen Bruchteil der Sekunde stoppt, wenn eine solche Nachricht eintrifft. Es ist nicht wirklich ernst, aber die Animation stoppt für eine Weile und die gesamte Benutzererfahrung ist ruiniert.Herunterladen von Bildern über WCF vs WebClient

Fragestunde:

1) Glauben Sie, es vorteilhaft wäre, WebClient stattdessen zu verwenden?

2) Ist der "normale" WCF-Client in Silverlight (mit "normal" ich meine ereignisgesteuertes Szenario) desysialize Datenverträge in Haupt (Aufruf) Thread oder im Hintergrund?

3) Sind Sie der Meinung, dass Overhead für das deserialisierte binäre Objekt vom Datenkontrakt in XML notwendig ist (+ größere Datengröße dank Base64 XML-Encodierung) größer/kleiner ist als zusätzlicher Umlauf zum Server (in diesem Fall würde der Datenkontrakt nur funktionieren) URL zu dem Bild enthalten und dann kann ich den WebClient verwenden - daher eine weitere Reise)?

4) Ist es möglich, Image aus dem Array byte [] im Hintergrundthread (nicht UI-Thread) zu erstellen?

Jede Hilfe, Ideen, Anregungen sehr geschätzt.

Danke,

Karol

PS: Ich Deepzoom nicht verwenden können, weil Geschäftsanforderungen nicht wirklich Deepzoom-Szenarien entsprechen.

Antwort

0

Sie können auch eine HTTP-Handler-Klasse auf der Serverseite verwenden, die das Image zurückgibt. Ich nehme an, dass Sie einen WCF-Dienst verwenden, da auf der Serverseite eine Logik vorhanden ist, die bestimmt, welches Bild zurückgegeben werden soll. Mit einem HTTP-Handler können Sie diese Logik auf der Serverseite ausführen und das Bild in einem Umlauf zurückgeben.

Lassen Sie den Handler Ihren WCF-Dienst anrufen, um die URL abzurufen, das Image abzurufen und im HTTP-Antwortdatenstrom zurückzugeben. Wenn Sie den MIME-Typ richtig festlegen, erkennt der Client (in diesem Fall Silverlight) den Unterschied nicht.

+0

Dank Steve, am Ende habe ich den zweiten Endpunkt mit REST-Protokoll erstellt, so kann ich Bild als binär aus dem gleichen Dienst zurückgeben und es in Silverlight über WebClient konsumieren. –

+0

Update: Ich habe einige Leistungstests durchgeführt. Wenn jemand interessiert ist: Rohbinär über REST ist 2.5 schneller als die gleichen Daten, die wie DataContract serialisiert werden. –

0

Der Hauptzweck von WCF besteht darin, strukturierte Daten von einem Ort zum anderen zu bringen. Ich glaube nicht, dass Bilder das sind, wofür es gedacht ist. Ich denke, dass die Verwendung von WebClient wahrscheinlich viel besser und schneller funktionieren würde. Vielleicht möchten Sie auch ein wenig mehr darüber nachdenken, ob es eine andere Lösung speziell zum Herunterladen von Ressourcendateien vom Server mit Silverlight gibt.


UPDATE: Eigentlich, wenn Sie nur eine regelmäßige Bildsteuerung verwenden Sie einfach einstellen können (oder ändern), um die Source-Eigenschaft auf eine neue Bitmap - dies wird den Download des Bildes von dem Server-Standort automatisch auslösen:

img.Source = new BitmapImage(new Uri("http://the.image.url/image.jpg")); 

Anschließend können Sie das Bildsteuerelement programmatisch in Ihr Silverlight-Dokument einfügen.

Verwandte Themen