我们在带有 .NET Framework 4.5 的 IIS 7 上托管了 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();
}
}