1

相互に通信し、コマンドを実行し、データをやり取りする必要がある複数のインスタンスを持つ C# プログラムがあります。現在、これは非常に面倒な WM_COPYDATA を使用して実現されています。NetNamedPipeBindings を使用して、これを 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 で機能させることはできません。それは可能ですか?

4

1 に答える 1

2

呼び出しを非同期にして、適切なスレッドへのインターリーブと(おそらく)マーシャリングを手動で処理しない限り、それがどのように可能であるかはわかりません。結局のところ、クライアント(スレッド)はサーバーを呼び出しており、サーバーが応答を返すまでブロックされます。したがって、クライアントスレッドはすでにブロックされているため、クライアントへのコールバックはコードをデッドロックします。

于 2012-01-28T20:57:21.470 に答える