Am o aplicație Silverlight 2 beta 2 care accesează un serviciu Web WCF. Din acest motiv, în prezent, se poate utiliza numai legarea basicHttp. Serviciul web va returna cantități destul de mari de date XML. Acest lucru pare destul de risipitor din punct de vedere al utilizării lățimii de bandă, deoarece răspunsul, dacă este zip, ar fi mai mic cu un factor de 5 (de fapt, am lipit răspunsul într-un fișier txt și l-am prins).
Cererea are "Accept-Encoding: gzip, deflate" - Există vreo modalitate prin care serviciul WCF gzip (sau altfel comprima) răspunsul?
Am găsit acest link , dar sigur pare un pic cam complex pentru funcționalitatea care ar trebui să fie gestionată în afara casetei IMHO.
OK - la inceput am marcat solutia folosind System.IO.Compression ca raspuns ca niciodata nu mi-ar fi "parut" sa fac compresia dinamica IIS7 sa functioneze. Ei bine, după cum se dovedește:
-
Compresia dinamică pe IIS7 a fost de lucru de-a lungul. Doar pluginul Web Developer Helper al lui Nikhil pentru IE nu a arătat că funcționează. Cred că din moment ce SL difuzează serviciul web în browser, browser-ul se ocupă de el "sub capace", iar instrumentul lui Nikhil nu vede niciodată răspunsul comprimat. Am reușit să confirm acest lucru prin utilizarea programului Fiddler care monitorizează traficul extern aplicației de browser. În glumă, răspunsul a fost, de fapt, comprimat cu gzip!
-
Cealaltă problemă cu soluția System.IO.Compression este că System.IO.Compression nu există în Silverlight CLR.
Deci, din perspectiva mea, modul EASIEST de a permite compresia WCF în Silverlight este de a permite comprimarea dinamică în IIS7 și de a nu scrie deloc codul.