私はこれをすぐに再現することはできませんが、これを再現する方法を知っています。
クライアントがサーバーに接続し、クライアントが長時間アイドル状態になると(サーバーがサブスクライブしているものとして、サーバーがメッセージを送信するのを待機します)binaryread.ReadByte()
、列挙型にタイプキャストされ、スイッチで使用されます。不明な時間が経過すると、サーバーはメッセージを送信する場合がありますが、接続が長時間アイドル状態であるため、サーバーは例外を受け取り、クライアントが切断されたことを認識します。クライアント(ReadByte()を実行しているスイッチ上にあります)は例外を取得せず、ただそこに座っています。サーバーから切断されていることにさえ気づきません。
なんでそうじゃないの?これを回避するにはどうすればよいですか?今のところ私はnetworkstreamを直接使用しています(これはbinaryreadingが使用しているストリームです)が、これが正しい解決策になるとは思いません。
この問題を正しく解決するにはどうすればよいですか?