如何在WCF REST服务中处理压缩请求

时间:2013-10-07 13:54:52

标签: wcf iis-7 .net-4.5 gzipstream ihttpmodule

我们在IIS 7上使用.NET Framework 4.5托管了WCF REST服务。客户端使用请求标头以GZip压缩格式发送数据:

Content-Encoding:gzip
Content-Type: application/xml

但是如果请求是压缩格式的话,我们收到来自服务器的错误请求。我们通过实现IHttpModule来启用请求压缩,IHttpModule将过滤/修改传入的请求。根据我的理解,这是失败的,因为WCF使用原始内容长度(压缩数据的长度)而不是解压缩数据。所以这是我的问题:

我们有什么办法可以解决IIS7 / .NET 4.5中的内容长度问题吗?我的HTTP模块实现如下:

httpApplication.Request.Filter = New GZipStream(httpApplication.Request.Filter, CompressionMode.Decompress)`

如果在服务器端无法解决内容长度问题,我是否可以通过压缩请求从客户端发送原始内容长度?客户端实现如下:

using (Stream requeststream = serviceRequest.GetRequestStream())
{
   if (useCompression)
   {
       using (GZipStream zipStream = new GZipStream(requeststream, CompressionMode.Compress))
       {
           zipStream.Write(bytes, 0, bytes.Length);
           zipStream.Close();
           requeststream.Close();
       }

       serviceRequest.Headers.Add("Content-Encoding", "gzip");
   }
   else
   {
       requeststream.Write(bytes, 0, bytes.Length);
       requeststream.Close();
   }
}

1 个答案:

答案 0 :(得分:0)

检查这是否适合压缩和二进制编码器 MSDN: Choosing a Message Encoder