如何在WCF REST服务中处理压缩请求
我们有一个WCF REST服务,托管在带有.NET Framework 4.5的IIS 7上。客户端正在发送GZip压缩格式的数据,并带有请求头:如何在WCF REST服务中处理压缩请求,wcf,iis-7,.net-4.5,gzipstream,ihttpmodule,Wcf,Iis 7,.net 4.5,Gzipstream,Ihttpmodule,我们有一个WCF REST服务,托管在带有.NET Framework 4.5的IIS 7上。客户端正在发送GZip压缩格式的数据,并带有请求头: Content-Encoding:gzip Content-Type: application/xml 但是,如果请求是压缩格式的,我们从服务器收到的请求是错误的。我们通过实现IHttpModule来启用请求压缩,IHttpModule将过滤/修改传入请求。据我所知,这是失败的,因为WCF使用原始内容长度(压缩数据的长度)而不是解压缩数据。下面是我
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();
}
}
检查这是否适用于压缩和二进制编码器
当我发送压缩请求时,服务器发出“400错误请求”时,我也遇到了同样的问题。你有没有找到解决办法?