Web服务客户端和压缩

时间:2011-10-14 09:19:31

标签: c# arrays web-services iis-7 asmx

我通过Gzip压缩管理设置II7。

我可以通过网络嗅探器检查我的asmx网络服务编码是Gzip但是如何启用 gzip压缩在我的C#客户端上,我在我的应用程序中使用Web服务是服务引用。

实际上我正在尝试发送大量数据,10k对象的数组因此压缩对bw有很大的影响。

但如何在C#Client上启用压缩。

我试图看到许多人看到同样的问题,但没有明确的答案,有人说使用第三方工具或有些人说自定义标题等等。

没有任何正确的方法,内置于使用压缩的Web服务

1 个答案:

答案 0 :(得分:1)

正如@Igby Largeman指出的那样,您可以使用IIS7在服务器上启用压缩,但这还不够。
主要思想是在客户端服务器端设置标头:

<强>客户端

Accept-Encoding = "gzip, deflate";

您可以通过代码实现此目的:

var request = HttpWebRequest.Create("http://foofoo");
request.Headers["Accept"] = "application/json";
request.Headers["Accept-Encoding"] = "gzip, deflate";

var request = HttpWebRequest.Create("http://foofoo");
request.AutomaticDecompression = DecompressionMethods.GZip |  
  DecompressionMethods.Deflate;

如果您使用的是某个WCF客户端,而不是HttpWebRequest,则应使用自定义检查器和调度程序,如this article中所示:

  

所以我使用了一个消息检查器来实现IClientMessageInspectorIDispatchMessageInspector来自动设置AcceptEncodingContentEncoding http标头。

     

这是完美的工作但我无法通过首先检测ContentEncoding标头解压缩服务器上的响应因此我使用了解决方法首先尝试解压缩它,如果失败只是尝试处理正常请求。

     

我也在客户端管道中这样做了,这也有效。

服务器

// This is the nearly same thing after all
Content-Encoding = "gzip" OR Content-Encoding = "deflate"

要在服务器端执行此操作,您应在IIS中启用httpCompression 我认为你应该检查original article以获得这项工作