Ich habe einen einfachen Webdienst aufgebaut, der einfach HttpListener verwendet, um Anfragen zu empfangen und zu senden. Gelegentlich schlägt der Dienst mit "Angegebener Netzwerkname ist nicht mehr verfügbar" fehl. Es scheint zu sein, wenn ich in den Ausgabepuffer der HttpListenerResponse schreibe.
Hier ist der Fehler:
ListenerCallback () Fehler: Der angegebene Netzwerkname ist nicht mehr verfügbar unter System.Net.HttpResponseStream.Write (Byte [] Puffer, Int32 Offset, Int32 Größe)
und hier ist der schuldige Teil des Codes. responseString sind die Daten, die zurück an den Client gesendet werden:
%Vor%Es scheint nicht immer ein riesiger Puffer zu sein, zwei Beispiele sind 3.816 Bytes und 142.619 Bytes, diese Fehler wurden ungefähr 30 Sekunden auseinander geworfen. Ich würde nicht denken, dass meine einzelne Klientenanwendung HTTPlistener überladen würde; Der Client sendet / empfängt gelegentlich Daten in Bursts, wobei mehrere Austauschvorgänge nacheinander stattfinden.
Meistens zeigen Google-Suchen, dass dies ein häufiges IT-Problem ist, bei dem bei Netzwerkproblemen dieser Fehler angezeigt wird - die meiste Hilfe richtet sich an Systemadmins, die ein Problem mit einer App besser diagnostizieren als Entwickler, die einen Fehler aufspüren. Meine App wurde auf verschiedenen Computern, Netzwerken usw. getestet und ich glaube nicht, dass es sich um ein Netzwerkkonfigurationsproblem handelt.
Was könnte die Ursache für dieses Problem sein?
Ich bekomme das auch, wenn ein ContentLength64
angegeben ist und KeepAlive
ist false
. Es sieht so aus, als ob der Client den Header Content-Length
prüft (was bei allen möglichen Accounts korrekt ist, da ich eine Exception mit einem anderen Wert erhalte) und dann "Whelp I'm done KTHXBYE" sage und die Verbindung schließt ein wenig bevor der zugrunde liegende HttpListenerResponse
-Stream es erwartet hat. Fürs Erste fange ich nur die Ausnahme und mache weiter.
Ich habe diese spezielle Ausnahme bisher nur einmal mit HttpListener bekommen. Es passierte, als ich die Ausführung wieder aufnahm, nachdem meine Anwendung für eine Weile auf einem Haltepunkt stand.
Vielleicht gibt es eine Art interne Zeitüberschreitung? Ihre Anwendung sendet Daten in Bursts, was bedeutet, dass sie wahrscheinlich die meiste Zeit inaktiv ist. Ist die Ausnahme unmittelbar nach einem Zeitraum der Inaktivität aufgetreten?
Tags und Links web-services network-programming httplistener