如何在WCF服务中处理压缩请求
我们有一个WCF REST服务,托管在带有.NET Framework 4.5的IIS 7上。客户端正在发送GZip压缩格式的数据,并带有请求头: 内容编码:gzip 内容类型:application/xml 但是,如果请求是压缩格式的,我们从服务器收到的请求是错误的。我们通过实现IHttpModule来启用请求压缩,IHttpModule将过滤/修改传入请求。据我所知,这是失败的,因为WCF使用原始内容长度(压缩数据的长度)而不是解压缩数据。下面是我的问题: 我们有没有办法解决IIS7/.NET 4.5中的内容长度问题?我的HTTP模块实现如下所示: httpApplication.Request.Filter=New GZipStream(httpApplication.Request.Filter,CompressionMode.decompression)` 如果无法在服务器端解决内容长度问题,是否有任何方法可以通过压缩请求从客户端发送原始内容长度?客户端实现如下:如何在WCF服务中处理压缩请求,wcf,Wcf,我们有一个WCF REST服务,托管在带有.NET Framework 4.5的IIS 7上。客户端正在发送GZip压缩格式的数据,并带有请求头: 内容编码:gzip 内容类型:application/xml 但是,如果请求是压缩格式的,我们从服务器收到的请求是错误的。我们通过实现IHttpModule来启用请求压缩,IHttpModule将过滤/修改传入请求。据我所知,这是失败的,因为WCF使用原始内容长度(压缩数据的长度)而不是解压缩数据。下面是我的问题: 我们有没有办法解决IIS7/.NE
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();
}
}
我能够使用wsHTTPBinding使gzip在WCF中工作,这是web请求的基础:
private HttpWebRequest GetWebRequest()
{
dynamic objHTTPReq = (HttpWebRequest)WebRequest.CreateDefault(_URI);
objHTTPReq.ContentType = "text/xml; charset=\"utf-8\"";
objHTTPReq.Method = "POST";
objHTTPReq.Accept = "gzip, deflate";
objHTTPReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.3;OfficeLivePatch.0.0; Zune 3.0; MS-RTC LM 8)";
objHTTPReq.Headers.Add("SOAPAction", "http://xxx.yyyy.zzzz");
return objHTTPReq;
}
那就试试吧。祝你好运。我遇到了同样的事情。您可以使用模块向请求添加筛选器,但一旦它转到WCF,它仍然会出现异常,因为现在请求的内容长度不同。我也尝试过这样做,但传入的请求仍然是压缩的,因此除非添加筛选器,否则我将获得压缩流。是否有指示WCF识别压缩请求的设置?