System.Net.WebException: базовое соединение было закрыто: соединение было неожиданно закрыто - PullRequest
9 голосов
/ 22 сентября 2009

Я пишу приложение .NET, которое должно отправлять данные в другое приложение .NET. Я использую следующий код для запроса страницы входа

WebProxy proxy = new WebProxy("http://proxy:80/", true);
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
//proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
// webRequest.Proxy = proxy;
webRequest.Proxy = WebRequest.DefaultWebProxy;

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();

но в этой строке происходит сбой

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());

с сообщением об ошибке:

System.Net.WebException: The underlying connection was closed: The connection was 
                         closed unexpectedly.

Ответы [ 8 ]

6 голосов
/ 04 декабря 2009

Если вы используете .NET 2.0 или выше, можете ли вы включить трассировку сети и посмотреть, что на самом деле происходит по сети. Таким образом, вы можете получить больше информации об этом конкретном исключении.

См. Следующую ссылку для получения более подробной информации, http://msdn.microsoft.com/en-us/library/hyb3xww8%28VS.80%29.aspx

5 голосов
/ 07 октября 2012

В моем случае это решило проблему:

                System.Net.ServicePointManager.Expect100Continue = false;

и ничего из вышеперечисленного.

1 голос
/ 22 сентября 2009

Я столкнулся с тем же исключением некоторое время назад, и я помню, что это происходит , в некоторых случаях из-за ошибки в .NET. Вы можете обойти это, установив для Timeout и ReadWriteTimeout запроса более высокие значения, или для KeepAlive установите значение false.

Это будет только обходной путь, поэтому я предлагаю вам попытаться найти истинную причину, прежде чем что-либо предполагать.

Я попытаюсь найти какие-нибудь ссылки в Интернете, а пока Загрузка больших файлов (WebException: соединение было неожиданно закрыто)

0 голосов
/ 29 мая 2015

У меня была эта проблема однажды. Моя защита от вирусов была виновником.

0 голосов
/ 08 мая 2015

Это был другой случай для меня. Запрос занимал слишком много времени, поэтому время соединения истекло. В WCF есть пять таймаутов 1. Тайм-аут отправки - по умолчанию 1 мин. 2. Тайм-аут приема - по умолчанию 1 мин. 3. Открытый тайм-аут - по умолчанию 1 мин. 4. Закрыть тайм-аут - по умолчанию 1 мин 5. Тайм-аут неактивности - по умолчанию 10 минут

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

0 голосов
/ 16 апреля 2014

В моем случае мне нужно было настроить параметры прокси-сервера, чтобы разрешить не только HTTP, но и HTTPS на один и тот же порт, поскольку один из запросов был отправлен по протоколу HTTPS.

0 голосов
/ 30 июня 2010
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

это решение

0 голосов
/ 04 декабря 2009

Похоже на возможные проблемы:

  1. Вы никогда не назначаете созданный вами прокси для HttpWebRequest

    WebProxy **proxy** = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    //proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
    // webRequest.Proxy = proxy;
    webRequest.Proxy = **WebRequest.DefaultWebProxy**;
    

    Вы должны назначить это так:

    WebProxy proxy = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    webRequest.Proxy = proxy;
    

    (обратите внимание на разницу в последней строке).

  2. Вы используете порт 80 на вашем прокси. Уверен, что это правильно? Многие прокси используют порт 8080.

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