2009-08-26 4 views
1

私は、同じサーバーまたはLAN上で実行されている2つの.Netプロセス間で全二重通信を処理する最も適切な方法を決定しようとしています。我々は、お互いにメソッドを呼び出すことができる必要がある2つのプロセスを持っています。WCFとの双方向通信 - コールバックを使用するか、単純に2つのチャネルを使用する必要がありますか?

現在、NamedPipeまたはTcpチャネルでWCFを使用しており、ProcessAにProcessBを登録しています。私たちのWCF契約はコールバックインターフェイスを指定しているので、ProcessBはProcessAのメソッドを呼び出すことができます。

私の質問は、次のうちどれが理にかなっていて、よりシンプルで、より強固ですか?

  1. ProcessBはProcessAのメソッドを呼び出すためにCallbackインターフェイス(WCFでサポート)を使用してください。
  2. 登録時に、ProcessAはProcessBにProcessBがProcessAに新しいチャネルを使用して登録するために必要な情報を渡しますか?

私はコールバックプロキシの寿命とスレッドの問題を十分に理解していません。コールバックメソッドのブロックに関するさまざまな記事を見てきました。

答えて

3

あなたのオプション2は、基本的には、クライアントが接続を開くとWCFは

オプション1であなたのために何をするか、それがサービスにコールバックチャンネルを登録するだけの説明です。このチャンネルは、あなたが閉じるまで明示的に呼び出すか、またはそれを破棄することによって、閉じられるまで開いたままです。

したがって、説明したシナリオでは、コールバック契約を続行する必要があるようです。それが彼らのためのものです。

+0

コールバックチャネルが存在することができ、またはそれは、具体的には、元のチャネルのためのコールバックと考えるべきですか? – DanJ

+0

@DanJ:「元のチャンネル」はどういう意味ですか?セッションを開始するクライアントチャネルを意味する場合は、no:クライアントチャネルを閉じると、コールバックチャネルも閉じます。コールバックチャネルを開いたままにする必要がある場合は、2つの完全に別々のサービスを実行する必要があります。たぶん私はあなたの質問を誤解したかもしれませんが、私はこれが当てはまらないという印象を受けました。 –

1

オプション2は、オプション1の機能を説明していますが、自分でできなかった方法を実装しています。たとえば、TCPチャネルを使用する場合は、クライアントがサーバーに開いてデータを返すSocketを使用します。

これは、ファイアウォールとNATの背後で動作することを意味します。

アウト

http://diagonaltechblog.blogspot.com/2009/12/wcf-duplex-channels-firewalls-and-nats.html

その両面チャネルを作成する方法についてはあまり詳細に入るものではありませんが、多くのことを管理しているように聞こえます。元のチャネルが閉じられた後

乾杯