我们有一个托管于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();
}
}