私は、互いに通信したり、コマンドを実行したり、データをやりとりする必要がある複数のインスタンスを持つC#プログラムを持っています。現在、これはWM_COPYDATAを使用して実行されますが、これはかなり面倒です。 NetNamedPipeBindingsを使ってこれをWCFシステムにアップグレードしたいと思います。しかし、どのような設定を試しても、リエントラントなデュプレックス通信はできません。WCFとのリエントラント二重通信
これは、通常のWCF呼び出しのようになります。
client calls proxy.foo
server executes foo
server finishes foo
client returns from proxy.foo
そして、これは私が欲しいものです:批判的
client calls proxy.foo
server executes foo
server calls callback.bar
client executes bar
client calls proxy.baz
server executes baz
server finishes baz
client returns from proxy.baz
client finishes bar
server returns from callback.bar
server finishes foo
client returns from proxy.foo
、私は同じスレッドであることをproxy.fooを呼び出すクライアントスレッドをしたいですproxy.bazを呼び出します。 Windowsメッセージの場合、これはコースのためのものです。しかし、どんな設定を試しても、私はこのパターンをWCFで動作させることができません。それも可能ですか?
一言...私はそれからCOPYDATAに固執していると思います。私はWCFがこれをサポートしていないことに非常に驚いています。 –
私はこれについていくつかのテストを行いましたが、上記はやや正しいですが、それは完全な話ではありません。 :S ConcurrencyMode = ConcurrencyMode.Reentrantを設定し、clintスレッドが(WinFormのように)同期化コンテキストを持つ場合、コールバックは自動的に元のスレッドにmarchallされます。また、クライアントからの元の呼び出しを非同期にする必要があるため(上記のように)、非同期パターンを実装するためのサーバー呼び出しが必要です。 私はあなたがチェックアウトできる "小さな"テストプロジェクトを作った: [link](http://www.noer.it/upload/Test_WcfReentrant.zip) – Reonekot