【问题标题】:ASP.NET WebService response compressionASP.NET WebService 响应压缩
【发布时间】:2011-01-13 20:39:46
【问题描述】:

如何压缩来自网络服务的输出数据(网络方法)。输出是 XmlDocument 类型。

这里是代码。

[WebMethod]
public XmlDocument GetPersonalInfo(int CustomerID)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(new CustomersXML().GetPersonalInfo(CustomerID));
    return doc;
}

我如何压缩此响应。请记住,它不是页面(HTTP 调用),而是从 Flex 客户端调用的 Web 服务。

谢谢

【问题讨论】:

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


    【解决方案1】:

    This answer 引用了ancient article,解释了如何使用SharpZipLib 以编程方式实现这一点。

    Another answer 演示了 System.IO.Compression classes 的使用,它可以替代 SharpZipLib。

    Rick Strahl 将an article 放在一起,审查了在实施压缩时需要注意的潜在问题,这些问题似乎在上面提供的示例中没有得到解决。他还链接到an article,提供有关使用 IIS7 内置压缩的更多详细信息。

    【讨论】:

      【解决方案2】:

      转到您的 iis 或任何配置文件,并在适当的位置添加以下行:

      <add mimeType="application/json" enabled="true" />
      

      我遇到了同样的问题 - 我的 IIS 能够 GZIP 任何 http 响应,除了 json 响应(我的应用程序最需要 gzip 压缩)。

      希望对你有帮助

      更新: 应用程序主机配置文件应位于:%windir%\System32\inetsrv\config

      【讨论】:

        【解决方案3】:

        我没有时间寻找代码,但有一个命名空间System.IO.Compression,其中包含多个用于 Gzip 和基于 Deflation 的压缩方案的类。对于跨语言通信,Gzip 可能是更安全的选择,因为我不确定通缩压缩的普及程度。

        但是,只要 SOAP 数据包中有一个标头告诉客户端服务器解压缩流,通信就不会有任何问题。

        注意:在执行此操作之前请仔细检查您的服务器设置,因为某些主机默认启用 Gzip,您不想执行两次。

        【讨论】:

          【解决方案4】:

          这与 .NET 无关。

          GZIP 是 Web 服务器中的一项 HTTP 功能 - 只要客户端支持它,通常在发送请求时通过在 ACCEPT 标头中发送 GZIP 来通知服务器。

          您需要在 IIS 中进行设置。根据版本,它可能会有所不同。在 IIS 7 中这很容易,只需设置一个标志。见here

          【讨论】:

          • Gzip 仅在 IIS7 中默认作为标准引入,并且仅在 Apache 中作为模块提供,因此我不会说它“与 .NET 无关”,因为这意味着这不是不能以编程方式调用的东西。您绝对可以直接从 .NET 输出 Gzipped 流。是否谨慎是一个完全独立的问题。
          猜你喜欢
          • 2011-05-21
          • 1970-01-01
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多