2009-09-22 29 views
6

Sto scrivendo un'applicazione .NET che dovrebbe inviare dati a un'altra applicazione .NET. Io uso il seguente codice per richiedere la pagina di loginSystem.Net.WebException: La connessione sottostante è stata chiusa: la connessione è stata chiusa in modo imprevisto

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(); 

ma viene a mancare su questa linea

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

con il messaggio di errore:

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

per iniziare a rintracciare il problema, suggerisco di avvolgere la chiamata nel codice di cattura delle eccezioni e stampare la traccia dello stack completo. –

+1

Questa eccezione è particolarmente difficile da rintracciare. Si prega di fornire quante più informazioni possibili se si desidera una risposta ragionevole – Rik

+0

La traccia dello stack dall'eccezione non fornisce altro che: a System.Net.HttpWebRequest.GetResponse() – Kwah009

risposta

2

ho incontrato la stessa eccezione un po ' fa e mi ricordo che questo succede in alcuni casi a causa di un bug in .NET. È possibile aggirare il problema impostando Timeout e ReadWriteTimeout della richiesta su valori più alti oppure impostare KeepAlive su false.

Questo sarebbe solo una soluzione, tuttavia, quindi suggerisco di cercare di trovare la causa effettiva prima di assumere qualsiasi cosa.

Cercherò di venire con alcuni riferimenti web, nel frattempo, guarda Big files uploading (WebException: The connection was closed unexpectedly)

+0

sembra che stiamo facendo qualcosa qui. Ora ricevo il messaggio di errore Il server remoto ha restituito un errore: (411) Lunghezza richiesta. Sebbene quando ho impostato la lunghezza, l'applicazione si blocca ... – Kwah009

0

Sembra come a possibili problemi:

  1. Non si può mai assegnare il proxy si crea al tuo 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**; 
    

    È necessario assegnare così:

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

    (notare la differenza nell'ultima riga).

  2. Si utilizza la porta 80 sul proprio proxy. Sicuro che sia corretto? Molti proxy utilizzano la porta 8080.

-1
myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials; 

questa è la soluzione

3

Nel mio caso, questo ha risolto il problema:

   System.Net.ServicePointManager.Expect100Continue = false; 

e nessuna delle precedenti.

+0

Ho riscontrato un problema durante il tentativo di comunicare con un servizio Web del dispositivo incorporato e questa era la soluzione. – jamesallman

0

Nel mio caso avevo bisogno di configurare le impostazioni del proxy per consentire non solo HTTP ma HTTPS sulla stessa porta, perché una delle richieste è stata inviata dal protocollo HTTPS.

0

Era diverso per me. La query richiedeva troppo tempo, quindi la connessione era scaduta. Sono disponibili cinque timeout in WCF 1. Timeout invio - Default 1 min 2. Timeout ricezione - Default 1 min 3. Timeout apertura - Default 1 min 4.Chiudi Timeout - Predefinito 1 min 5. Timeout inattività - Predefinito 10 min

Avevo impostato il tempo di invio e ricezione correttamente ma il problema era dovuto al timeout di inattività poiché la query era troppo lunga sul server, il servizio WCF stava chiudendo canale, quindi era non riuscendo a trasmettere la risposta. Spero che questo aiuti se si utilizza WCF per ottenere la risposta dal server che richiede molto tempo per l'esecuzione.

0

Ho avuto questo problema una volta. La mia protezione da virus era il colpevole.

Problemi correlati