Mar.14

IIS v6 (Windows 2003) en gecomprimeerde communicatie – Deel II

compression.JPGIn deel I was te lezen hoe je IIS 6 kunt configureren zodat er gecomprimeerd communicatie plaatsvindt. Vooral bij webservice implementaties kan dit leiden tot een reductie van de traffic van 90%. Bij beschikbaarheid van slechts een beperkte bandbreedte is het dus zeker handig na te gaan of gecomprimeerde communicatie een optie is. In deel II (en tevens het laatste deel) probeer ik te beschrijven hoe je gebruik kunt maken met een .NET webservice client van een webserver die gecomprimeerde communicatie toestaat. Standaard ondersteund .NET dit niet. Er zal dus wat moeten worden gedaan om te zorgen dat de client gecomprimeerde communicatie gaat gebruiken.

Om te beginnen is het library SharpZibLib noodzakelijk. Dit library gaat zorgdragen voor de decompressie van de te ontvangen data van een bepaalde webservice. De webservice client moet aan de server aangeven dat hij overweg kan met gecomprimeerde data. Daarom moet er in de http-header van de SOAP-request de key “Accept-Encoding” worden meegegeven met als waarden de type encodings die kunnen worden geaccepteerd, in dit geval gzip en deflate. Om te zorgen dat dit makkelijk te implementeren is in verschillende clients is het niet handig deze code op te nemen in de webservice proxyclass. De hieronder beschreven oplossing houdt daar rekening mee.

Onderstaande class verzorgt de decompressie van data:

Deze class is een overerfde van de WebResponse class. Deze class kunnen we vervolgens gebruiken in elke overerfde van een webservice client proxy class zoals hieronder beschreven. De overerfde van de proxy class maken we simpelweg aan op de volgende manier:

snoei.net.webservices.MyWebService is een door .NET gegenereerde proxy class. In bovenstaande overerfde wordt gezorgt dat automatisch bij het aanroepen van de webmethods in proxy class, in de soapheader wordt meegegeven dat de client overweg kan met compressie. Bij de ontvangst van de data wordt gecomprimeerde dan automatisch gedecomprimeerd. Als er geen compressie is ondersteund door de webserver dan functioneert de code ook gewoon correct.

Compressie kan bijzonder handig zijn in situaties met beperkte bandbreedte en overwegend communicatie van data. Kijk eens in de log files van IIS daar zijn de verschillen tussen communicatie zonder en met compressie goed te zien.

Tags:
Deel dit Verhaal:
  • facebook
  • twitter
  • gplus

Over Ton Snoei

Een enthousiaste ontwikkelaar in de allerbreedste zin van het woord.

Het aansturen maar vooral coachen van mensen geeft me veel plezier en een leuke uitdaging. Ik houdt me graag bezig met het bouwen van software maar ook met alle anderen dingen die komen kijken bij het vak dat IT heet.

Met als achtergrond ontwikkelaar heb ik veel ervaring met C# .NET en alles wat daarbij komt kijken. Deze kennis komt nog regelmatig goed van pas. Mijn liefde voor ontwikkeling van software is nooit verdwenen en heb mij daarom in het afgelopen jaar meer verdiept in Java, Android, iOS/iPhone/iPad (Monotouch/Xamarin), PHP en Unity 3D development. Ik noem dat altijd maar: "Lego-spelen voor grote mensen" ;-)

Kortom van de grote lijnen naar projecten tot hands-on problem solven.

Laat een reactie achter

Comment