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

标签 wcf iis-7 .net-4.5 gzipstream ihttpmodule

我们在带有 .NET Framework 4.5 的 IIS 7 上托管了 WCF REST 服务。客户端正在发送带有请求 header 的 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();
   }
}

最佳答案

检查这是否适合您压缩和二进制编码器
MSDN: Choosing a Message Encoder

关于wcf - 如何处理 WCF REST 服务中的压缩请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226753/

相关文章:

c# - 如何在 Wcf 服务上抛出异常并在客户端捕获它?

wcf - 无法在类库应用程序中使用 WCF 服务

.net 4.5 中的 Oracle 存储过程

c# - 使用 HttpContext OutputStream 写入 ZipArchive

asp.net - 如何检测当前应用程序池是否在 IIS7.5 和 Asp.Net 3.5+ 中结束

visual-studio-2012 - "csc.exe"在 Visual Studio 2012 中以代码 1 退出

c# - 在 WCF 中使用 session

c# - 从 C# 中的对象类型获取数据

asp.net - IIS7 404错误

ASP.NET 上下文重写路径 404 错误