如何从Web服务(Web方法)压缩输出数据。输出是XmlDocument类型。
这是代码。
[WebMethod]
public XmlDocument GetPersonalInfo(int CustomerID)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(new CustomersXML().GetPersonalInfo(CustomerID));
return doc;
}
我如何Gzip这个回复。请记住,它不是一个页面(HTTP调用),它是从Flex客户端调用的Web服务。
由于
答案 0 :(得分:1)
This answer引用了ancient article,解释了如何使用SharpZipLib以编程方式实现此功能。
Another answer演示了如何使用可替代SharpZipLib的System.IO.Compression
classes。
Rick Strahl汇总an article审查在实施压缩时需要注意的潜在问题,这些问题在上面提供的示例中似乎没有得到解决。他还链接到an article,提供有关IIS7内置压缩使用的更多详细信息。
答案 1 :(得分:1)
转到您的iis或任何配置文件,并在适当的位置添加以下行:
<add mimeType="application/json" enabled="true" />
我遇到了同样的问题 - 我的IIS能够GZIP任何http响应,除了json响应(在我的应用程序中需要gzip压缩最多的地方)。
希望有所帮助
更新: 应用程序主机配置文件应位于此处:%windir%\ System32 \ inetsrv \ config
答案 2 :(得分:0)
我没有时间查找代码但是有一个名称空间System.IO.Compression
,它有几个基于Gzip和基于Deflation压缩方案的类。 Gzip对于跨语言交流可能是一个更安全的选择,因为我不确定通缩压缩的普遍程度。
但是,只要有一个包含SOAP数据包的标头告诉客户端服务器解压缩流,就不应该在通信中遇到任何麻烦。
注意:在执行此操作之前,请仔细检查您的服务器设置,因为某些主机默认启用了Gzip并且您不想执行两次。
答案 3 :(得分:0)
这与.NET无关。
GZIP是Web服务器中的HTTP功能 - 只要客户端支持它,它通常通过在发送请求时在ACCEPT标头中发送GZIP来通知服务器。
您需要在IIS中进行设置。根据版本的不同,它可能会有所不同。在IIS 7中,它非常简单,只需要设置标志即可。请参阅here。