2016-06-28 22 views
1

NamedPipesで2つのアプリケーションが互いに通信しています。 appServer(サーバー)とappClient(クライアント)としましょう。彼らは正常に接続し、一定の時間の間、データを前後に送信します。次に予期せず、appClientがクラッシュします。ユーザーはそれを再起動してパイプに接続しようとしましたが、appServerはまだ接続されていると考えているので、新しい接続を待機していません。予期しない紛失またはクラッシュの後にNamedPipeServerStreamに再接続

私は現在falseとして.IsConnected)を返し、クライアント側(上trueとして.IsConnectedを返すサーバ側(上NamedPipeServerStream、およびNamedPipeClientStreamを使用しています

私の質問はこれです:私は何とかクライアントを得ることができます再接続できるようにする方は?私は、タイムアウトが、運の有無にかかわらず.Connectを明らかにしようとしました。

任意のヒントが理解されている! ありがとう!

編集: もう1つの有効な(ただし望ましくない)オプションは、基本的にクライアントが「まだそこにいる」ことを確認するために、サーバー側で安価な操作を実行することです。誰もがこれらの1つを知っていますか?ダミーのメッセージを送信する以外に、私はこれを行う最善の方法をよく分かりません。私はこのオプションが好きではありません。なぜなら、それは継続的に起こらなければならないものですが、私はすべての道にぴったりです。

+0

パイプが壊れているか切断されていると、サーバーコードにIOExceptionがスローされます。あなたはそれを得ていないと確信していますか?おそらく抑止していますか?クライアントプロセスが終了することは確かですか? –

+0

テスト中、私はプロセスを明示的に終了させて​​います。スローされた例外は見られません。それはどこに投げられると思いますか?サーバーは基本的にはそこに座って待っています。明示的に「安い」例外を設定するためにできることはありますか? – tmwoods

+0

MSDNのドキュメントによると、パイプが破損している場合、サーバーコードはIOExceptionを受け取ります。https://msdn.microsoft.com/en-us/library/bb546085(v=vs.110).aspxクライアントがクラッシュした場合(またはテストのためにそれを終了した場合)、IOExceptionがトリガーされることが予想されます。あなたが見ている問題を示す小さなコード例を投稿できますか? –

答えて

0

私たちのソリューションは、別の接続を待っていた2番目のスレッドを開始することになりました。その後、クライアントを比較し、同じクライアントであれば元のサーバーパイプを閉じてリサイクルしてきれいにしました。

関連する問題