13

HttpListenerを使用してリクエストを送受信する単純なWebサービスを構築しました。場合によっては、「指定されたネットワーク名は使用できなくなりました」というメッセージが表示されてサービスが失敗することがあります。HttpListenerResponseの出力バッファーに書き込むとスローされるようです。

エラーは次のとおりです。

ListenerCallback()エラー:指定されたネットワーク名はSystem.Net.HttpResponseStream.Write(Byte []バッファー、Int32オフセット、Int32サイズ)で使用できなくなりました

これがコードの有罪部分です。responseStringは、クライアントに返送されるデータです。

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

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

常に巨大なバッファであるとは限りません。2つの例は3,816バイトで、142,619バイトで、これらのエラーは約30秒間隔でスローされました。私の単一のクライアントアプリケーションがHTTPlistenerをオーバーロードするとは思わないでしょう。クライアントは時折データをバーストで送受信し、いくつかの交換が次々に発生します。

ほとんどのGoogle検索では、これが一般的なITの問題であり、ネットワークの問題がある場合にこのエラーが表示されることが示されています。ほとんどのヘルプは、開発者がバグを追跡するよりも、アプリの問題を診断するシステム管理者に向けられています。私のアプリはさまざまなマシンやネットワークなどでテストされており、単なるネットワーク構成の問題ではないと思います。

この問題の原因は何でしょうか?

4

5 に答える 5

6

ContentLength64aが指定されていてKeepAliveisの場合、私もこれを取得していますfalse。クライアントがヘッダーを検査しているように見えますContent-Length(他の値で例外が発生するため、考えられるすべてのアカウントで正しく設定されています)、「KTHXBYEが完了しました」と言って接続を少し閉じます基になるHttpListenerResponseストリームがそれを期待する前に。今のところ、私は例外をキャッチして先に進んでいます。

于 2009-09-04T17:11:08.227 に答える
0

HttpListenerを使用しているときに、これまでに1回だけこの特定の例外が発生しました。これは、アプリケーションがブレークポイントにしばらく立っていた後に実行を再開したときに発生しました。

おそらく、何らかの内部タイムアウトが関係していますか?アプリケーションはデータをバーストで送信します。つまり、多くの場合、完全に非アクティブになっている可能性があります。非アクティブな期間の直後に例外が発生しましたか?

于 2009-06-05T07:36:43.540 に答える
0

ここでも同じ問題がありますが、他のスレッドは例外を無視することを提案しています。

HttpListenerのC#の問題

それは正しいことではないかもしれません。

于 2011-11-18T07:04:58.937 に答える
0

私にとって、クライアントがWebページを完全にロードする前に閉じると、その例外が発生することがわかりました。私がしているのは、try catch ブロックを追加して、例外が発生したときに何かを出力するだけです。つまり、例外を無視します。

于 2020-07-27T10:53:09.317 に答える