NamedPipes
で2つのアプリケーションが互いに通信しています。 appServer
(サーバー)とappClient
(クライアント)としましょう。彼らは正常に接続し、一定の時間の間、データを前後に送信します。次に予期せず、appClient
がクラッシュします。ユーザーはそれを再起動してパイプに接続しようとしましたが、appServer
はまだ接続されていると考えているので、新しい接続を待機していません。予期しない紛失またはクラッシュの後にNamedPipeServerStreamに再接続
私は現在false
として.IsConnected
)を返し、クライアント側(上true
として.IsConnected
を返すサーバ側(上NamedPipeServerStream
、およびNamedPipeClientStream
を使用しています
私の質問はこれです:私は何とかクライアントを得ることができます再接続できるようにする方は?私は、タイムアウトが、運の有無にかかわらず.Connect
を明らかにしようとしました。
任意のヒントが理解されている! ありがとう!
編集: もう1つの有効な(ただし望ましくない)オプションは、基本的にクライアントが「まだそこにいる」ことを確認するために、サーバー側で安価な操作を実行することです。誰もがこれらの1つを知っていますか?ダミーのメッセージを送信する以外に、私はこれを行う最善の方法をよく分かりません。私はこのオプションが好きではありません。なぜなら、それは継続的に起こらなければならないものですが、私はすべての道にぴったりです。
パイプが壊れているか切断されていると、サーバーコードにIOExceptionがスローされます。あなたはそれを得ていないと確信していますか?おそらく抑止していますか?クライアントプロセスが終了することは確かですか? –
テスト中、私はプロセスを明示的に終了させています。スローされた例外は見られません。それはどこに投げられると思いますか?サーバーは基本的にはそこに座って待っています。明示的に「安い」例外を設定するためにできることはありますか? – tmwoods
MSDNのドキュメントによると、パイプが破損している場合、サーバーコードはIOExceptionを受け取ります。https://msdn.microsoft.com/en-us/library/bb546085(v=vs.110).aspxクライアントがクラッシュした場合(またはテストのためにそれを終了した場合)、IOExceptionがトリガーされることが予想されます。あなたが見ている問題を示す小さなコード例を投稿できますか? –