ASP.NET WebService响应压缩

时间:2011-01-13 20:39:47

标签: asp.net xml web-services gzip compression

如何从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服务。

由于

4 个答案:

答案 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