2009-01-20 11 views
5

Ich weiß, dies ist eine vage Frage, vor allem, da ich keinen Code zur Verfügung stelle, aber ich bin eine .Net 2.0-Anwendung entwickeln, und wir haben eine WebRequest, die Daten an eine intern erstellte API sendet.HttpWebRequests fehlgeschlagen bei nachfolgenden Aufrufen

Das seltsame Ding geschieht auf unserer 3. (und immer der 3.) nachfolgenden Anfrage, die bei der Methode GetRequestStream() fehlschlägt. Das erste und zweite Mal, als es angerufen wurde, ist alles in Ordnung. Beim 3. Mal hängt es ein bisschen und irgendwann endet es.

Die API wird von anderen Anwendungen intern aufgerufen, sodass wir wissen, dass es sich nicht um ein Server- oder Netzwerkproblem handelt. Wir haben mehrere Maschinen ausprobiert, die alle das gleiche Problem haben. Hat jemand dieses Problem schon einmal gehabt oder hat jemand irgendwelche Nachforschungen über das Debuggen gemacht (da das Antwortobjekt nichts oder zumindest nichts Nützliches erzeugt).

Antwort

18

Dies geschieht normalerweise, wenn Sie die WebResponse nicht entsorgen. Es gibt eine Begrenzung für die Anzahl der Verbindungen von einem Client zu demselben Computer, und standardmäßig sind es zwei. Die Verbindungen können wiederverwendet (oder geschlossen) werden, wenn Sie die WebResponse schließen. Die Verwendung Aussage ist dein Freund hier:

WebRequest request = [...]; 
// Do stuff with the request stream here (and dispose it) 
using (WebResponse response = request.GetResponse()) 
{ 
    // Stuff with the response 
} 
+0

Ich habe das versucht, aber die Verwendung Ansatz für mich überhaupt nicht funktioniert. Das gleiche Problem ... – Ted

+0

@Ted: Das deutet darauf hin, es ist nur eine andere Ursache ... –

+1

Nun, es ist nicht wirklich. Es ist das gleiche Problem. Und es wurde "gelöst", indem die Anforderung, HTTP 1.0 und nicht 1.1 zu verwenden, angegeben wurde. Siehe hier: http://stackoverflow.com/a/8384691/178143 – Ted

1

Ja, genau das Richtige. Die Antwort wurde nicht ordnungsgemäß entsorgt. Wir hatten das dem Müllsammler überlassen, was, wie Sie schon vermutet hatten, nicht rechtzeitig gesammelt wurde. Leider habe ich meinen Browser geschlossen und vergessen, irgendwelche Antworten zu lesen (lol, wie dumm glaube ich, ich fühle) und das Problem ist gelöst.

Ich habe heute Abend 2 Dinge gelernt. 1, entledigen Sie Ihre WebRequests richtig; und 2, ACHTEN SIE MEHR AUF STACK-OVERFLOW ANTWORTEN!

+0

Hauptsache ist, dass man sich niemals auf den Garbage Collector verlassen muss, um Dinge zu implementieren, die IDisposable implementieren, aber nicht * wissen * sind sicher (zB MemoryStream). –