2

Windows サービスでホストされている WCF サービスがあります。このサービスのクライアントは、closeTimeout、receiveTimeout、openTimeout、sentTimeout を 5 分に設定しています。サービスも同様です。特定の状況では、WCF サービスがタスクを処理するのに 5 分以上かかる場合があります。この場合、クライアントは呼び出しを中止しますが、サービス プロセスはジョブが完了するまで実行を続けます。

さて、問題は...クライアントが切断またはタイムアウトしたこと(または他の何か?)を検出して、WCFサービスがタスクを中止できるようにする構成/手法はありますか?

4

1 に答える 1

1

不可能ではないにしても、 簡単ではありません(したがって、これはほとんど重複した質問です)。

クライアントが切断されたときに操作をキャンセルしますか? それ以外の場合は、ある種の作業キューを使用して、状態のようなメカニズムを実装できます。

次に、クライアントは を呼び出しますQueueQuery(query)。これは、それ以上のことは何もせず、キューに入れられたばかりのクエリに識別子を返します。その後、クライアントはポーリングQueryStatus(id)を続けてステータス (「Queued」、「Running」、「Finished」など) を取得し、クエリが終了すると を呼び出すことができますQueryResults(id)

一方、別のサービス (つまり、WCF サービスではなく Windows サービス) は、キューに入れられたすべてのクエリを実行し続けます。

于 2012-01-20T13:43:50.553 に答える