2

我必须与不使用 Web 服务的稍微过时的系统进行交互。为了向这个系统发送数据,我需要将一个 XML 文档发布到另一个系统网站上的表单中。这个 XML 文档可能会变得非常大,所以我想压缩它。另一个系统位于 IIS 上,我最终使用 C#。我当然可以在发布数据之前实现一些压缩数据的方法,但这需要其他系统进行更改,以便它可以解压缩数据。我想避免更改其他系统,因为我不拥有它。

我听说过有关在 IIS 和浏览器中启用压缩/http 1.1 的模糊信息,但我不知道如何将其转换为我的程序。基本上,我可以在我的程序中设置一些属性,使我的程序自动压缩它发送到 IIS 的数据,并让 IIS 无缝解压缩它,以便接收应用程序甚至不知道其中的区别?

这是一些示例代码,大致显示了我在做什么;

private static void demo()
    {

        Stream myRequestStream = null;
        Stream myResponseStream = null;

        HttpWebRequest myWebRequest = (HttpWebRequest)System.Net
                              .WebRequest.Create("http://example.com");
        byte[] bytMessage = null;
        bytMessage = Encoding.ASCII.GetBytes("data=xyz");
        myWebRequest.ContentLength = bytMessage.Length;
        myWebRequest.Method = "POST";

        // Set the content type as form so that the data
        // will be posted as form              
        myWebRequest.ContentType = "application/x-www-form-urlencoded";

        //Get Stream object 
        myRequestStream = myWebRequest.GetRequestStream();

        //Writes a sequence of bytes to the current stream    
        myRequestStream.Write(bytMessage, 0, bytMessage.Length);

        //Close stream
        myRequestStream.Close();

        WebResponse myWebResponse = myWebRequest.GetResponse();
        myResponseStream = myWebResponse.GetResponseStream();
}

“data=xyz”实际上是“data=[一个几 MB XML 文档]”。

我知道,如果可以通过非编程方式实现这一点,那么这个问题最终可能会归入非编程领域,因此请提前道歉。

4

2 回答 2

2

我认为没有办法在一侧压缩数据并在另一侧接收未压缩的数据而不主动解压缩数据..

于 2008-12-09T13:07:15.963 回答
0

不知道这是否可行,因为我能找到的所有示例都是用于下载的,但您可以尝试使用 gzip 压缩数据,然后将传出消息上的 Content-Encoding 标头设置为gzip. 我相信 Length 应该是压缩消息的长度,尽管如果这不起作用,您可能希望将其设置为未编码消息的长度。

祝你好运。

编辑 我认为问题在于支持压缩的 ISAPI 过滤器是否在上传时永远/总是/可配置地调用。我找不到答案,所以我怀疑答案永远不会,但直到你尝试(或找到我无法找到的答案)后你才会知道。

于 2008-12-09T13:13:17.187 回答