项目当中需要用到 GZipStream 解压缩。我先把我写的方法帖出来大家帮忙看一下。public static string Post(string Url, string RequestString, int TimeoutSeconds)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);            if (TimeoutSeconds > 0)
            {
                request.Timeout = 1000 * TimeoutSeconds;
            }
            request.Method = "POST";
            request.AllowAutoRedirect = true;            byte[] data = System.Text.Encoding.GetEncoding("gb2312").GetBytes(RequestString);            if ((RequestString.Length > 4096) || (RequestString.IndexOf("transType=106") > -1))
            {
            try
            {
                request.ContentType = "application/x-gzip";
                request.Accept = "application/x-gzip";
                GZipStream outstream = new GZipStream(request.GetRequestStream(), CompressionMode.Compress);                outstream.Write(data, 0, data.Length);
                outstream.Close();
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            }
            else
            {
                request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "";
                Stream outstream = request.GetRequestStream();                outstream.Write(data, 0, data.Length);
                outstream.Close();
            }            HttpWebResponse hwrp = (HttpWebResponse)request.GetResponse();
            string ContentType = hwrp.Headers.Get("Content-Type");            StreamReader sr = null;            if (ContentType.IndexOf("text/html") > -1)
            {
                 sr = new StreamReader(hwrp.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
            }
            else
            {
                 sr = new StreamReader(new GZipStream(hwrp.GetResponseStream(), CompressionMode.Decompress), System.Text.Encoding.GetEncoding("gb2312"));
            }            return sr.ReadToEnd();
        }这个方法会出现一个非常奇怪的问题,当我和别人进行联调的时候发现这个方法前面两次压缩是正常的,当进行到第三次压缩的时候就会出现非常异常的错误,当程序进行第三次压缩的时候程序不再运行下去了,用 try 也不行。

解决方案 »

  1.   

    具体阻塞在哪里了呢?你的程序好像最后没有关闭request吧。
      

  2.   

    基于GZipStream的多文件压缩组件TGZipCompressBar实现
      

  3.   

    GZipStream outstream = new GZipStream(request.GetRequestStream(), CompressionMode.Compress); 
    就是这一句,当第三次运行到这一句的时候程序就不再运行下去。用 try 也没有错误出来。
      

  4.   

    关闭 request 也还是这样。
      

  5.   

    关闭 request 也还是没用。
      

  6.   

    TGZipCompressBar 不行的。 因为这是和另一家公司进行数据通讯。
      

  7.   

    关闭后request调用
                    GC.WaitForPendingFinalizers();
    就是保证当前的Stream一定关闭并释放了句柄,否则句柄在没释放之前,如果你再次请求就处于锁死状态了。不但是request,所有stream都主动调用close一下。
      

  8.   

    request.GetRequestStream() 这东西返回是一个流吧? 是不是应该关闭下?还有下面那个StreamReader 
    在说有流关闭前调用Flush()方法GZipStream 是否会调用到非托管资源,如果访问频率较高,这地方需要互斥下
      

  9.   

    request.GetRequestStream() 返回的也是一个压缩流。
      

  10.   

    GZipStream outstream = new GZipStream(request.GetRequestStream(), CompressionMode.Compress);outstream.Write(data, 0, data.Length);
    outstream.Flush();
    outstream.Close();
    GC.WaitForPendingFinalizers();
    加了 GC.WaitForPendingFinalizers() 还是不行,还是出现同样的状态。