2009-01-09 8 views
8

Ich habe einen einfachen Webdienst erstellt, 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"Der angegebene Netzwerkname ist nicht mehr verfügbar" in Httplistener

ist der Fehler:

ListenerCallback() Error: The specified network name is no longer available at System.Net.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 size)

und hier ist der Schuldige Teil des Codes. responseString sind die Daten zurück an den Client gesendet werden:

  buffer = System.Text.Encoding.UTF8.GetBytes(responseString); 

      response.ContentLength64 = buffer.Length; 
      output = response.OutputStream; 
      output.Write(buffer, 0, buffer.Length); 

Es scheint nicht zwei Beispiele zu sein, immer ein großer Puffer, sind 3816 Bytes und 142.619 Bytes, wurden diese Fehler etwa 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, wenn bei Netzwerkproblemen dieser Fehler angezeigt wird - die meiste Hilfe richtet sich an Systemadmins, die ein Problem mit einer App besser diagnostizieren als Entwickler . Meine App wurde auf verschiedenen Rechnern, Netzwerken usw. getestet und ich glaube nicht, dass es sich um ein Netzwerkkonfigurationsproblem handelt.

Was könnte die Ursache für dieses Problem sein?

+0

Haben Sie einen Code, den Sie posten können? Etwas, das den Fehler reduziert, wäre sehr hilfreich. –

+0

hinzugefügt einige weitere Details, Austin. – pc1oad1etter

+0

Irgendeine Lösung? – CraftyFella

Antwort

0

Ich habe diese besondere Ausnahme bisher nur einmal mit HttpListener bekommen. Es geschah, als ich die Ausführung wieder aufnahm, nachdem meine Bewerbung 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 einer gewissen Inaktivität aufgetreten?

2

Ich bekomme das auch, wenn eine ContentLength64 angegeben ist und KeepAlivefalse ist. 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 Ausnahme mit einem anderen Wert bekomme) und dann "Whelp I'm done KTHXBYE" sage und die Verbindung ein wenig schließt Bit vor dem zugrunde liegenden HttpListenerResponse Stream war es zu erwarten. Fürs Erste fange ich nur die Ausnahme und ziehe weiter.

Verwandte Themen