0

クライアントサーバーのWCFデュプレックスシナリオで、クライアント側でエラーが発生したことをサーバーに通知するための推奨される方法は何ですか?サーバーがクライアントの1つに特定の操作を実行する必要があることを通知し、クライアント側で例外がスローされているとします。

コールバックインターフェースでは、私はこのようなものを持っています

[OperationContract(IsOneWay = true)]
void Work(...);

最善のアプローチは何ですか:

  1. NotifyServer(int clientId, string message)要求された操作が失敗したことをユーザーに知らせるためにクライアントが呼び出すことができるメッセージを実装します。
  2. 操作コントラクトを設定した場合、UIの応答性を維持するために、スレッドIsOneWay = false上のすべてのクライアントを呼び出す必要がありますか?BackgroundWorker
  3. サーバーに非同期操作を実装しますか?これはどのように機能しますか?クライアントで非同期操作を生成できますが、クライアントのコールバックメソッドに同じパターン(BeginWork、 )を使用する必要がありますか?EndWork

FaultException動作しないときにクライアント側にをスローするため、他に何も考えられませんIsOneWay = true

何かアドバイス?

前もって感謝します!

4

1 に答える 1

0

広告 1. これは 1 つの方法です... Work() に予想外の時間がかかる可能性があり、その呼び出しでサーバー スレッドがハングしたくない場合に推奨されます。

広告 2. WCF 操作は常にバックグラウンド ワーカーで実行し、UI スレッド内では決して実行しないでください。IsOneWay=False を設定すると、明らかに Work() メソッドは、リモート クライアントでの実行が終了して結果を返すまで、サーバーでブロックされます。 . ただし、 isOneWay=true を設定しても、メソッドは低レベルの WCF 通信でブロックされます。WCF 接続が切断された場合、通知を受け取るまでに長い時間がかかることがあります。

広告 3. パターンはあなた次第です。例: MSDN: OperationContractAttribute.AsyncPattern プロパティ

最善の解決策はありません。それはすべて設定 (クラス、スレッドなど) に依存します。コーディングする WCF レイヤーは、使いやすく便利であるべきです。これが主なガイドラインです。

于 2012-12-03T13:34:56.737 に答える