Ich habe eine Silverlight 2 Beta 2-Anwendung, die auf einen WCF-Webservice zugreift. Aufgrund dessen kann sie derzeit nur basicHttp-Bindung verwenden. Der Webservice wird relativ große Mengen an XML-Daten zurückgeben. Dies scheint aus Bandbreitennutzungsgründen ziemlich verschwenderisch zu sein, da die Antwort, wenn sie komprimiert wäre, um den Faktor 5 kleiner wäre (ich habe die Antwort tatsächlich in eine Textdatei eingefügt und sie komprimiert).
Die Anforderung enthält "Accept-Encoding: gzip, deflate" - Gibt es eine Möglichkeit, den WCF-Service dazu zu bringen, die Antwort zu komprimieren (oder anderweitig zu komprimieren)?
Ich habe diesen Link gefunden, aber es scheint ziemlich komplex für eine Funktionalität zu sein, die meiner Meinung nach out-of-the-box behandelt werden sollte.
OK - zuerst habe ich die Lösung mit der Verwendung von System.IO.Compression als Antwort markiert, da ich nie "scheine", die dynamische Komprimierung von IIS7 zum Laufen zu bringen. Nun, wie sich herausstellte:
-
Die dynamische Komprimierung auf IIS7 hat die ganze Zeit funktioniert. Es ist nur so, dass Nikhils Web Developer Helper-Plugin für den IE es nicht funktionieren zeigte. Meine Vermutung ist, dass, da SL den Webservice-Aufruf an den Browser übergibt, der Browser es "im Hintergrund" behandelt und das Tool von Nikhil die komprimierte Antwort nie sieht. Ich konnte dies bestätigen, indem ich Fiddler benutzte, der den Verkehr außerhalb der Browseranwendung überwacht. In Fiddler war die Antwort tatsächlich gzip-komprimiert!!
-
Das andere Problem mit der Lösung mit System.IO.Compression ist, dass System.IO.Compression nicht im Silverlight CLR existiert.
Also aus meiner Sicht ist der EINFACHSTE Weg, die WCF-Komprimierung in Silverlight zu aktivieren, die Aktivierung der dynamischen Komprimierung in IIS7 und überhaupt keinen Code zu schreiben.
0 Stimmen
Die dynamische Kompression funktioniert nur für einige Anfragen (d. h. diejenigen, die von IIS als häufig aufgerufen eingestuft werden). Es ist also eine nette Funktion, aber du hast keine Kontrolle darüber. Ich habe einen wirklich großen Aufruf, wenn sich ein Benutzer anmeldet, aber das geschieht nur einmal am Tag und er wird nicht komprimiert.