HttpWebResponse异步底层连接已关闭:发送时发生意外错误

时间:2011-12-04 20:59:49

标签: c# httpwebrequest

我使用HttpWebRequest类异步代码如下(它只是windows应用程序)

    private void StartWebRequest(string url)
    {

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.BeginGetResponse(new AsyncCallback(FinishWebRequest), request);


    }

    private void FinishWebRequest(IAsyncResult result)
    {
            HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            int num = 100000;
            byte[] buffer = new byte[num];
            int offset = 0;
            while ((num2 = responseStream.Read(buffer, offset, 1000)) != 0)
            {
                offset += num2;
            }
            MemoryStream stream = new MemoryStream(buffer, 0, offset);
            Bitmap bitmap = (Bitmap)Image.FromStream(stream);
            bitmap.Save(@"z:\new.jpg");
            response.Close();

            responseStream.Close();
            stream.Close();

    }

有时我会收到错误:
底层连接已关闭:发送时发生意外错误
反正有没有解决这个问题?
谢谢

1 个答案:

答案 0 :(得分:2)

您正在从远程服务器读取数据块,但在某些时候,对远程服务器的传出请求失败。

至于为什么,请检查是否存在内部异常。可能你需要使用像Fiddler或其他代理,用于确定远程服务器关闭连接的原因。

顺便说一下,你有没有理由读取1000字节的块?令我感到震惊的是,您可能最好直接从服务器流式传输到您指定的100kb阵列。而且,还要确保该缓冲区足够大,以便您的图像...