2012-06-18 17 views
9

いくつかの操作を公開するWCFサービスを構築していますが、HTTPSエンドポイントが必要なためIISで実行されます。ほとんどの操作は数秒以内に実行されます。ただし、これらの操作の1つまたは2つは5〜90分かかります。IISでホストされているWCFで長時間実行されるサービス操作を処理する正しい方法は何ですか?

このサービスの主なコンシューマーは、ASP.NET MVCアプリケーションです。これを処理する正しい方法は何ですか?

タイムアウトをジャックアップして、いくつかのajaxコールを行うべきですか?私はデータベースにテーブルを追加し、このデータベースを長期間にわたる操作で更新し、毎分このテーブルをポーリングする必要がありますか?私は、これが一般的に受け入れられているベストプラクティス(存在すれば)を知りません。

+0

長時間実行されている操作でデータが転送されない場合は、これを非同期プロセッサに分割する必要があります。そのため、クライアントはジョブを開始するように要求し、定期的にチェックして応答または後でチェックバックするメッセージを取得します。 – Noah

+1

@ Noahの場合、長時間実行されている操作ではデータが返されずに完了し、約50kbのメッセージが返されます。 – Nate

+0

データを転送しない場合は、その間HTTP接続を開いたままにしないでください。 @Jimはまともな例を提供します。 – Noah

答えて

1

次のリンクを一個のintとしていくつかのプッシュ通知(私は何もデータが返されないと仮定)を思い付くことができます。

  1. 「ジョブ」の「ステータス」をデータベースに格納する方法を選択しました。
  2. 私はWCFクライアント(プロキシ)を実装したマネージャーWindowsサービスを作成しました
  3. "ワーカーホスト"を実装したWCFサービスを作成しました。

マネージャーサービスはデータベースからキューを読み取り、すべての「ワーカーホスト」に作業を渡します。私がWindowsサービスを持っていた理由は、UIがワーカーホストに直接話すのとは対照的に、このタスクを実行した理由は、プロセス全体に対して特別なレベルの制御を与えたからです。

私はワーカーホストから「ネットワークケーブルを抜いてください」という考えが好きではなく、この特定のジョブから状態の更新を再度受け取りませんでした。 WindowsサービスはWCFワーカーホストの進行状況を常に監視する機能を提供します。接続エラーが発生した場合(または予期しない場合)、状態をfailedに更新できます。したがって、孤立したジョブはありません。

+0

MSMQを使用する代わりに独自のマネージャをロールバックする理由はありますか? – Nate

+0

特にありません。私はMSMQを使ったことは一度もありませんでしたが、これは学校/ COOPのためのプロジェクトに過ぎないと言いました。私はデザインを改善する方法はたくさんあると確信していますが、私が必要としていたほど簡単でした。このアプリケーションの主な目的はWCFを扱うことでしたが、MSMQは役に立ちましたが、それは焦点ではありませんでした。 – Jim

+0

あなたの設計では、「ワーカーホスト」のそれぞれがマネージャに仕事を探して質問しますか?あるいは、マネージャは、必要なときにそれぞれの仕事を呼びますか? – Nate

0

この

WCF Long Running Operations を見てみましょあり、他のオプションもが、彼らはほぼ同じである可能性があります。あなたはまた、私は私の先輩のプロジェクトのために似たような、基本的にはジョブスケジューリングフレームワークを書いた

WCF Push

関連する問題