2011-01-22 9 views
1

私はサービスとクライアントの間の一貫した名前付きパイプ接続に依存する二重WCFサービスを持っています。これは、クライアントがサービスでSubscribeを呼び出し、サブスクリプションリストに入れられるパブリッシュ/サブスクライブシステムのようなものです。その後、サービスは、独自の更新メソッドを呼び出し、コールバックを介してクライアントに更新をプッシュします。netnamedpipebinding無限のreceiveTimeoutの信頼性はどれくらいですか?

netnamedpipebindingのrecieveTimeoutを「無限」に設定しました。この接続が永遠に開かれていると合理的に頼ることができますか?さらに重要なことは、チャネルがタイムアウトの外でフォールトを起こす状況があるかどうかです。

名前付きパイプは単に共有メモリの場所なので、ハードウェアの問題以外にも一貫して失敗する理由はたくさんあります。さらに、特定の間隔でping以外の接続を保証する方法はあまりありません。

私が気になるのは、クライアントをWCFサービスにすることを避けることです。私はそれが本当の循環依存ではないことを知っていますが、それはちょっとした気分です。しかし、私は私が私がただただ編集的であると言っている人々には開いています、そして、そのようなパターンは大丈夫です。

答えて

3

決して接続に頼ることはできません。サービス上の単一の未処理の例外/障害により、チャネルが閉じられます。私はクライアント上でClosedとFaultedのイベントを処理するか、プロキシレクレーションと再サブスクリプションを使ってpingを実装するべきだと思います。

デュプレックス通信を使用する場合は、契約を公開するだけでクライアントが必要です。クライアントがエンドポイントを公開しないため、サービスを公開するのと同じではありません。名前付きパイプは設計上二重化されているため、通信はクライアントからサービスに作成された単一のチャネルによって実行されます。いくつかのトランスポートでデュプレックス通信をしたいときはいつも、クライアント上でいくつかの処理コードが必要です。

+0

"あなたは決して信頼できません"?ここでダブルネガティブとはどういう意味ですか? – Gabe

+0

@Gabe:ありがとう、私はそれを変更しました。 –

+0

Hey Ladislav。 お返事ありがとうございます!クライアントの契約を公開するとどういう意味ですか?これはサーバー側からの接続を再確立するものですか?あらかじめ指定された名前のパイプアドレスに再接続できるので、クライアント側からのフォールトを確実に処理できます。サーバー側からどうすればいいですか? もう一度おねがいします! Jieren – Jieren

関連する問題