2

WCFサービスがクライアントから非同期で呼び出されると、クライアントアプリがブロックされていないことがわかります。

しかし、非同期メソッド呼び出しの実行中にWCF側のスレッドがブロックされているのでしょうか、それともWCFがメソッド呼び出しの開始に使用したスレッドを解放しているのでしょうか。

たとえば、以下のコードのように、ASP.Netアプリから非同期で'Add'メソッドを呼び出すと、バックエンドのサービスインスタンスはメソッドが完了するまで待機しますか?WCFはPerCallのInstanceContextを使用します。

        CalculatorClient client = new CalculatorClient();

        // AddAsync
        double value1 = 100.00D;
        double value2 = 15.99D;
        client.AddCompleted += new EventHandler<AddCompletedEventArgs>(AddCallback);
        client.AddAsync(value1, value2);
4

1 に答える 1

4

非同期呼び出しのWCFサポートは、厳密にはクライアント側の機能のみです。

実際、このサービスには、同期呼び出しを行うクライアントと非同期呼び出しを行うクライアントの2つのクライアントの違いを区別する方法がありません(また、そうすべきではありません)。

これは、クライアントが非同期プロキシを介して呼び出しを行っているか、非同期呼び出しを介して直接呼び出しを行っているかに関係なく当てはまります。

これが思考実験で真実であることを示すのは簡単です。すべてのwcfサービスは非同期で呼び出すことができ、さらにこれは選択されたバインディングに関係なく、したがって、これはクライアント側の機能のみである必要があります。

于 2012-12-23T12:39:25.450 に答える