0

データベースへの接続層として WCF サービスを使用する MVC アプリケーションがあります。WCF での一部の操作には時間がかかります。では、この問題の最善の解決策は何ですか? MVC アプリケーションで非同期コントローラーを使用し、WCF で Task.Factory.StartNew を使用する必要がありますか? それとも、MVC では単純なコントローラーと AJAX を使用し、WCF では Task.Factory.StartNew を使用する必要がありますか? または、MVC で Task.Factory.StartNew を使用する方が良いですか? それとも、WCF で単純なスレッドを使用する方がよいでしょうか?

EDITED: たとえば、私のサービスはレポートを生成します - 時間がかかります。ユーザーがレポートの生成を開始できるようにし、それが完了するまで待たないようにしたい-たとえば、「生成中」を表示します。その後、別のレポートの生成を開始できます。レポートの生成が終了したら、それをユーザーに返します。

そのようなタイプのソリューションでベストプラクティスを提供するか、正しい方向性を教えてください。どうもありがとう。

4

1 に答える 1

2

この種の要件は、Tim Rogers がコメントで指摘したように、複数の方法で設計できます。レポートに焦点を当てたユースケースから判断すると、おそらく次のようにします。

  1. レポートの生成を開始する WCF メソッド (ワーカー スレッドを開始し、何らかのプロセス/レポート ID を返します)
  2. 操作のステータスを確認するための WCF メソッド (操作/レポート ID に基づく)
  3. ポイント1からメソッドを呼び出し、特定のユーザーの進行中のジョブのステータスを照会できる通常のコントローラー
  4. 過去のジョブと進行中のジョブのリストとそのステータスを提示するビュー (おそらく、ユーザー エクスペリエンスを向上させるために、ステータスを更新するための AJAX リクエストを実装するでしょう)

もちろん、これは大まかな説明にすぎません。ポイント 3 と 4 は簡単で簡単ですが、ポイント 1 と 2 はさまざまな方法で実装できます。タスクの永続性 (メモリ内または db ベース) を使用して独自のスレッド戦略を実装することでこれにアプローチできます。WCF ワークフロー サービスなどを使用してみてください。これが役立つことを願っています。

于 2013-04-02T10:35:47.810 に答える