WCF REST 压缩

标签 wcf rest compression gzip

我有一个 REST 服务,它返回一大块 XML,大约值(value) 150k。

例如http://xmlservice.com/services/RestService.svc/GetLargeXML

因此我想压缩来自服务器的响应,因为 GZIP 应该将其减少到更小的值。在到处搜索后,我无法找到如何对 WCF REST 服务执行压缩的示例。帮助!!

注意:我的服务由第三方托管,我无法通过 IIS 执行此操作,因为他们不支持它。

最佳答案

实际上,做到这一点非常容易,至少在 .NET 4.0 中是这样(我没有用 3.5 进行测试)。我所做的就是让 IIS 7 来处理它。无需创建自定义压缩过滤器。

首先,确保您已安装 IIS 7 的动态压缩功能。然后,在 IIS 管理器中选择服务器并使用压缩模块打开动态压缩。或者,您可以从命令行执行此操作:

C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true 

接下来,编辑以下文件。您可能必须复制它,而不是直接编辑配置(Notepad++ 对我提示),然后在准备好时覆盖原始文件。

C:\Windows\System32\Inetsrv\Config\applicationHost.config

在那里,您将在 下找到 部分。在 下,您需要添加当客户端发送 Accept-Encoding: gzip header 时要压缩的所有 mime 类型。例如:

<dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="application/xml" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</dynamicTypes>

完成所有这些后,回收您的应用程序池,您就可以开始了。如果这不起作用,请尝试重新启动服务器并确保在应用程序级别和服务器级别打开动态压缩。

注意:根据我读过的一些帖子,曾经存在一个错误,您必须指定字符编码(例如,“application/json; charset=utf-8”)。不过,我没有遇到任何问题。

关于WCF REST 压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1402295/

相关文章:

java - 审计实体的 Dynamics 365 RetrieveAttributeChangeHistory OData 函数

django - 通过RESTful API使用django和tastypie进行文件发布

performance - 如何压缩 CouchDB 的 HTTP 响应中的 JSON 内容?

java - Apache commons 压缩 7z 文件大小比 p7zip 压缩大得多

java - Spring 中对版本化实体的 ETag 支持

用于压缩连续正整数的 C 库

c# - WCF 跟踪文件不断损坏?

单例模式下的WCF实例化,使用负载均衡器

wcf - 用于开发 WCF 应用程序的模型

c# - WCF 和 Silverlight - 二进制编码