2012-03-31 8 views
2

Ich habe einen Webdienst, der einen XML-Wert in einem String-Format zurückgibt.IIS-Komprimierung für WebService Rückgabe eines großen Zeichenfolgenwerts

Durch IE9 kann ich sehen, dass einige der Größe für die Web-Service-Anrufe so hoch wie 1 MB gehen.

I aktiviert Komprimierung in IIS 6 durch die Datei Metabase.xml bearbeiten, das Setzen der folgenden:

HcScriptFileExtensions = "asmx" 

unter dem

IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip" 

Ich habe auch HTTP-Komprimierung auf der Registerkarte Service für die freigegeben Eigenschaften von Websites im IIS-Manager.

Ich habe auch die HttCompression in den Web-Service-Erweiterungen, Mapping auf die GZIP-DLL auf dem Windows \ System32 \ inetsrv \ -Ordner hinzugefügt.

Wenn ich den Aufruf an den Webdienst mache, wird der zurückgegebene Wert nicht komprimiert (die gleiche Größe wie beim Serviceaufruf zuvor).

Gibt es Tipps, um sicherzustellen, dass IIS den String-Datenwert komprimiert, der von IIS zurückgegeben wird?

Update: Ich folgte auch die Hinweise auf diese Links gilt:

http://rextang.net/blogs/work/archive/2007/09/12/5654.aspx http://blogs.msdn.com/b/rextang/archive/2007/09/13/4880187.aspx

Mit IE9, ich von den Entwicklertools, die Detailansicht des Web-Service-Aufrufs überprüfen, kann ich sehen, dass der Accept-Encoding-Schlüssel einen Wert von gzip/deflate hat.

Der Web-Service-SOAP-XML-Wert (in String) wird immer noch nicht komprimiert. Irgendwelche Bereiche, in denen ich weiter schauen sollte?

Übrigens verwende ich IIS6.

Update: geprüft ich diese Seite: http://blogs.iis.net/webtopics/archive/2009/02/24/troubleshooting-http-compression-in-iis-6-0.aspx

I 1,2,3 richtig Einzelteile erhielten.

Für Punkt 4 habe ich sogar versucht nur asmx als Erweiterung zu setzen, aber ohne Erfolg.

Für Element 5 habe ich keine Komprimierungseinstellung auf einer untergeordneten Ebene.

Für Element 6 führt das Antivirenprogramm keine Überprüfung des Verzeichnisses zur Komprimierung durch.

Für Element 7 übergebe ich keinen Schrägstrich als Parameter auf der ausführenden DLL.

Für Artikel 8 bin ich unsicher, wo/wie Sie dies überprüfen.

Für Artikel 9 habe ich mit Fiddler überprüft und die richtigen Header werden auf die Anfrage Header gesetzt.

Für Element 10 sehe ich keine Einstellungen in meinen Apps, die diese berühren müssten.

Für Artikel 11 ist der Statuscode, den ich erhalte, 200.

Für Element 12 wird auf die App ohne Proxy zugegriffen.

Für Artikel 13 ist die Anfrage ein Webservice.

+0

Obwohl tangential im Zusammenhang, einen Blick auf [Wie IIS-Komprimierung für WCF-Dienste aktivieren] (http://stackoverflow.com/questions/1735088/how-to-enable-iis-compression-for-wcf -Dienstleistungen). –

+0

Und [Gzip-Komprimierung mit WCF auf IIS7] (http://stackoverflow.com/questions/2713203/gzip-compression-with-wcf-hosted-on-iis7) –

+0

Noch eine andere mögliche Lösung [asp.net und wcf Kompression über iis] (http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/420/asp-net-and-wcf-compression-via-IIS.aspx) – Tung

Antwort

2

Angelo,

Die Kombination von Einstellungen auf IIS6 sind super empfindlich und unversöhnlich. Zum Beispiel müssen die verschiedenen konfigurierbaren Dateierweiterungen jeweils auf einer neuen Zeile beginnen - nicht durch Leerzeichen begrenzt. Die Empfindlichkeit der IIS6-Komprimierung ist insbesondere wahr, wo dynamisch generierte Inhalte (wie Rückgaben von Webservices) beteiligt ist.

Probieren Sie die folgenden Einstellungen aus, führen Sie einen IIS-Reset durch, um diese Metabasisänderungen neu zu laden, und drücken Sie die Daumen!

<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate" 
    HcCompressionDll="%windir%\system32\inetsrv\gzip.dll" 
    HcCreateFlags="0" 
    HcDoDynamicCompression="TRUE" 
    HcDoOnDemandCompression="TRUE" 
    HcDoStaticCompression="TRUE" 
    HcDynamicCompressionLevel="10" 
    HcFileExtensions="htm 
         html 
         xml 
         css 
         txt 
         rdf 
         js" 
    HcOnDemandCompLevel="10" 
    HcPriority="1" 
    HcScriptFileExtensions="asp 
          cgi 
          exe 
          dll 
          aspx 
          asmx" 
     > 
</IIsCompressionScheme> 
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip" 
    HcCompressionDll="%windir%\system32\inetsrv\gzip.dll" 
    HcCreateFlags="1" 
    HcDoDynamicCompression="TRUE" 
    HcDoOnDemandCompression="TRUE" 
    HcDoStaticCompression="TRUE" 
    HcDynamicCompressionLevel="10" 
    HcFileExtensions="htm 
         html 
         xml 
         css 
         txt 
         rdf 
         js" 
    HcOnDemandCompLevel="10" 
    HcPriority="1" 
    HcScriptFileExtensions="asp 
          cgi 
          exe 
          dll 
          aspx 
          asmx" 
     > 
</IIsCompressionScheme> 
<IIsCompressionSchemes Location ="/LM/W3SVC/Filters/Compression/Parameters" 
    HcCacheControlHeader="max-age=86400" 
    HcCompressionBufferSize="8192" 
    HcCompressionDirectory="%windir%\IIS Temporary Compressed Files" 
    HcDoDiskSpaceLimiting="FALSE" 
    HcDoDynamicCompression="TRUE" 
    HcDoOnDemandCompression="TRUE" 
    HcDoStaticCompression="TRUE" 
    HcExpiresHeader="Wed, 01 Jan 1997 12:00:00 GMT" 
    HcFilesDeletedPerDiskFree="256" 
    HcIoBufferSize="8192" 
    HcMaxDiskSpaceUsage="99614720" 
    HcMaxQueueLength="1000" 
    HcMinFileSizeForComp="1" 
    HcNoCompressionForHttp10="FALSE" 
    HcNoCompressionForProxies="FALSE" 
    HcNoCompressionForRange="FALSE" 
    HcSendCacheHeaders="FALSE" 
     > 
</IIsCompressionSchemes> 
+0

Angelo, empfehle ich auch Fiddler2 für eine schöne, saubere Art, um die Änderungen an der Größe des Inhalts zu bewerten. Wenn Sie es ausführen, bevor Sie Änderungen vornehmen und die Ausgabe Ihrer Seite speichern, haben Sie einen Benchmark, um zukünftige Tests zu messen. –

+0

Es wurde erwähnt - "konfigurierbare Dateierweiterungen müssen jeweils auf einer neuen Zeile beginnen". Wie sind die Leerzeichen, die die Dateierweiterungen trennen? Sind sie 3-mal tipped? – Angelo

+0

@Angelo Ich denke, es wird so lange funktionieren, bis du tatsächlich einen Wagenrücklauf drin hast. Das Problem ist, wenn sie sich in der gleichen Zeile mit nur Leerzeichen befinden. Für Ihren Test versuchen Sie einfach ASMX hinzuzufügen, sobald Sie bestätigt haben, dass es funktioniert, können Sie weitere Erweiterungen hinzufügen, um mit mehreren Erweiterungen zu spielen. –

Verwandte Themen