HttpWebResponse Async Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка - PullRequest
0 голосов
/ 05 декабря 2011

Я использую класс 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 Ответ

2 голосов
/ 05 декабря 2011

Вы читаете данные порциями с удаленного сервера, но в какой-то момент исходящий запрос к удаленному серверу не выполняется.

Что касается , почему , проверьте, есть ливнутреннее исключение.Возможно, вам понадобится что-то вроде Fiddler или другого прокси, чтобы определить, почему удаленный сервер закрывает ваше соединение.

Кстати, есть ли какая-то причина, по которой вы читаете 1000-байтовые блоки?Меня поразило, что вам может быть лучше просто транслировать прямо с сервера в указанный вами массив размером 100 КБ.И, кроме того, убедитесь, что этот буфер достаточно велик для вашего изображения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...