2009-09-09 68 views
7

我有一个REST服务返回大量的XML,大约150K的价值。WCF REST压缩

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

因此,我想压缩来自服务器的响应,因为GZIP应该将其减小到更小。经过搜索,我无法为我的生活找到一个如何为WCF REST服务执行压缩的例子。帮帮我!!

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

回答

-1

下面是可能适用的链接:

WS-Compression for WCF

最起码,应该把你在正确的轨道上。

+2

谢谢,但不幸的是,这是一个WS(SOAP)解决方案,而不是REST(webHttp)。 – PhilJ 2009-09-09 22:26:47

-2

最简单的方法是在servlet前面使用PLJ压缩过滤器。

PJL Compression Filter

这看起来对接受编码HTTP标头,以确定是否客户端可以接受压缩的响应。它基本上只是将ServletOutputStream封装在GZipOutputStream或DeflateerOutputStream中 - 非常简单而且有用。从MSFT

+0

这是一个在IIS上运行的WCF服务,所以J2EE servlet过滤器显然不是一种选择。 – PhilJ 2009-09-10 22:48:28

+0

我的坏,没有一个线索什么WCF - 认为这是另一个Java类型的框架。 – Gandalf 2009-09-11 15:12:52

6

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

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

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

接下来,编辑以下文件。你可能不得不复制它,而不是直接编辑配置(记事本++抱怨我),然后在准备好时覆盖原文。

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

在那里你会发现在<httpCompression>一个<dynamicTypes>部分。在<dynamicTypes>下,当客户端发送Accept-Encoding:gzip头时,您需要添加所有需要压缩的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”)。但是,我没有任何问题。

+1

使用web.config也可以做到这一点,这样更方便:http://codeasp.net/blogs/raghav_khunger/microsoft-net/1973/asp-net-enable-gzip-compression-via-web-config – 2012-04-10 17:50:19