Warum WebRequest timeout immer auf die erste Anfrage, aber nie auf alle nachfolgenden
Habe ein Problem, wo aufrufen WebRequest.GetResponse()
hängt und mal mit dem ersten Aufruf, aber nach dem ersten Aufruf funktioniert alles einwandfrei.
try {
WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/");
//Sends the HttpWebRequest and waits for the response.
myHttpWebRequest.Timeout = 1000;
WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
} catch(Exception e) {
Console.WriteLine("Failure 1");
}
try {
WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/");
//Sends the HttpWebRequest and waits for the response.
myHttpWebRequest.Timeout = 1000;
WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
} catch(Exception e) {
Console.WriteLine("Failure 2");
}
try {
WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/");
//Sends the HttpWebRequest and waits for the response.
myHttpWebRequest.Timeout = 1000;
WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse();
} catch(Exception e) {
Console.WriteLine("Failure 3");
}
mit diesem code in eine Konsolenanwendung, erhalte ich immer eine Failure 1
. Unter dem debugger oder nicht. Ich habe ein 1000 Schleife, und es schlägt immer fehl auf dem ersten, nie eine andere. In der Tat, das Lesen der logs des Webservers, die es eigentlich nie erhält die erste Anfrage. Bin ich hier etwas fehlt?
- Haben Sie überhaupt die Lösung für dieses Problem '
- Ja, es war das Ergebnis mit einem VPN laufen. Ausschalten der VPN oder VPN-software wie das problem behoben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: ich habe realisiert, die Antwort unten passen würde mit der genaue Gegenteil situation, wo die erste Anfrage funktioniert, aber das andere nicht. Aber es ist immer noch wichtig - Sie wirklich werden sollte, entsorgen Sie Ihre Antworten. Es wäre auch sinnvoll, wenn, wenn Sie den Fehler melden, Sie berichten auch die Ausnahme Nachricht...
Arbeiten Sie heraus, was hier vor sich geht, Sie sollten wirklich so etwas wie WireShark so können Sie sehen, ob das problem ist, dass die Anfrage gemacht wird, aber nicht darauf reagiert, oder ob es nicht auch gemacht wird.
Frage ich mich, ob das problem eigentlich, dass es die Lösung eines proxy oder sowas in der Art... und es gibt gerade mal genug Zeit um es zu beheben, bevor die zweiten Anfrage mal aus. Versuchen Sie die Erhöhung der timeouts. Auch dies sollte sichtbar über WireShark.
Du bist nicht die Entsorgung der web-Antwort, also der connection pool für die zweite Anforderung wird mit der Zeit aus warten, um zu bekommen, dass die Verbindung zurück.
Setzen die
WebResponse
Teil in einemusing
- Anweisung, und Sie werden wahrscheinlich feststellen, es funktioniert alles einwandfrei:Das ist vorausgesetzt, Sie hatten tatsächlich tun etwas mit der Antwort, natürlich. Sonst könnte man ja einfach schreiben:
🙂
Vielleicht ein wenig spät, aber ich hatte genau den gleichen Effekt. Der Grund war schließlich, dass es wurde kein Standard-gateway im Netzwerk. Die Lösung war, optianally legen Sie die Anfrage.Proxy = null.
Hoffe, das hilft.
Können Sie ein Verhalten sehr ähnlich wie diese, wenn Sie nicht geleert haben\Schloss die RequestStream vor Fragen, für die Antwort. Dieses Verhalten scheint zu existieren auf .NET 3.5 aber gerichtet wurde .NET Framework 4.5. Ich bemerkte das problem beim Wechsel Rahmen - code (w/o den in der Nähe), arbeitete in 4,5 aufgehört zu arbeiten, wenn kompiliert 3.5. Vielleicht versuchen Sie es ausdrücklich immer die RequestStream und schließen es als work-around.
Ich hatte das gleiche Problem, in meinem Fall habe ich erhöhte die
timeout
Wert derWebRequest
Objekt und es hat geklappt!(Ich habe die timeout-Eigenschaft auf 60 Sekunden).