如何使用C#和IIS无缝压缩我发布到表单的数据?

时间:2008-12-09 12:53:10

标签: c# iis compression httpwebrequest

我必须与一个不使用webservices的稍微过时的系统接口。为了将数据发送到该系统,我需要将XML文档发布到另一个系统的网站上的表单中。这个XML文档可能变得非常大,所以我想压缩它。 另一个系统位于IIS上,我使用C#my end。我当然可以在发布之前实现压缩数据的东西,但这需要更改其他系统以便解压缩数据。我想避免更改其他系统,因为我不拥有它。

我听说过在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 MB文档]”。

我知道,如果可以通过非程序化手段实现这个问题,那么这个问题最终可能属于非编程问题,所以请提前道歉。

2 个答案:

答案 0 :(得分:2)

在没有主动解压缩数据的情况下,我认为无法在一侧压缩数据并在另一端接收未压缩的数据。

答案 1 :(得分:0)

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

祝你好运。

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