2009-09-22 3 views
6

Я пишу приложение .NET, которое должно отправлять данные в другое приложение .NET. Я использую следующий код для запроса страницы ВойтиSystem.Net.WebException: Основное соединение было закрыто: соединение было неожиданно закрыто.

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. 
+2

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

+1

Это исключение особенно сложно отследить. Пожалуйста, предоставьте как можно больше информации, если вы хотите получить разумные ответы. – Rik

+0

Трассировка стека из исключения дает не более: at System.Net.HttpWebRequest.GetResponse() – Kwah009

ответ

2

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

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

Я постараюсь придумать с некоторыми веб-ссылок, в то же время, посмотрите на Big files uploading (WebException: The connection was closed unexpectedly)

+0

похоже, что мы здесь. Теперь я получаю сообщение об ошибке. Удаленный сервер возвратил ошибку: (411) Требуется длина. Хотя, когда я устанавливал lengthfeild, приложение зависает ... – Kwah009

6

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

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

0

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

  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.

-1
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials; 

это решение

3

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

   System.Net.ServicePointManager.Expect100Continue = false; 

и ни один из выше.

+0

У меня возникла проблема, связанная с подключением к веб-сервису встроенного устройства, и это было решением. – jamesallman

0

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

0

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

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

0

У меня был этот вопрос один раз. Виной была защита.

Смежные вопросы