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

4
我们有一个托管于IIS 7上,使用.NET Framework 4.5的WCF REST服务。客户端通过请求头以GZip压缩格式发送数据。
Content-Encoding:gzip
Content-Type: application/xml

但是,如果请求以压缩格式发送,我们会从服务器获取到错误的请求。我们通过实现 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
我遇到了同样的问题,当我发送压缩请求时,我们的服务器会返回“400错误请求”。你找到解决方法了吗? - ParvusM
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接