0

asp.net mvc4 を使用してデータの一部を管理するイントラネット サイトを開発しています。このサイトの重要な機能の 1 つは、インポート/エクスポート ジョブをトリガーすることです。これらのジョブには、5 分から 1 時間かかる場合があります。サイトのユーザーは、ジョブが現在実行されているかどうか、および以前のジョブのステータスを判断できる必要があります。多くのジョブには、重複データに関する警告メッセージが含まれていることが多く、これらの警告をサイトに表示する必要があります。

私の計画は、これらの実行時間の長いプロセスを asp.net サイトがやり取りする WCF ワークフロー サービスとして実装することです。アクティビティを介してビジネス ロジックの多くを実装し、単純なコンソール アプリケーションを使用してテストしました。サイト上の特定の「プロジェクト」に基づいてサービスを分割するために、相関ハンドルを使用していることに注意してください。

私の問題は、アクティブなジョブ (存在する場合) のステータスと、以前のジョブの警告メッセージを照会する方法です。これを行う最善の方法は、AppFabric 追跡サービスを使用し、asp.net で SQL 監視ストアにクエリを実行して、現在の状態を報告することだと思います。AppFabric をセットアップしてカスタム トラッキング メッセージを追加した後、いくつかの問題に遭遇しました。最初の問題は、特定のプロジェクトのワークフローのみを表示したいので、正しい関連付けハンドルを使用していないワークフロー インスタンスを除外する方法がわからないことです。もう 1 つの問題は、追跡データベースがかなり遅延する可能性があることです。これにより、ワークフローが現在実行されているかどうかを判断しようとすると問題が発生します。

もう 1 つの解決策として、ワークフローでデータベースを明示的に更新し、現在のステータスとエラー メッセージを使用することが考えられます。私はこの解決策に傾倒していますが、専門家のアドバイスを利用できます。

TL;DR: WCF ワークフロー サービスの実行状態と警告メッセージを照会する最良の方法を知る必要があります。

4

1 に答える 1

0

ワークフローが終了した後でもワークフローのステータスとメッセージを照会したいので、クライアントが送信する相関値を関連するワークフロー ID に変換できるテーブルを作成することから始めます。それを行うためのカスタム アクティビティを作成し、ワークフローを作成する受信の直後にドロップします。

次に、クライアント アプリがステータスのクエリに使用する通常の WCF サービスを作成します。この WCF サービスは、WF 永続ストアにクエリを実行して、特定のワークフローがまだ実行されているかどうかを確認できます。その場合、アクティブなブックマークの列に、ワークフローが現在待機している SOAP メッセージが表示されます。

メッセージに関しては、AppFabric 追跡インフラストラクチャを使用してメッセージを保存および取得するか、カスタム アクティビティを作成して独自のデータベースに保存することができます。生成された標準の WF 追跡メッセージにも関心があるかどうかは、大きく異なります。

実行中のワークフロー インスタンスの確認に関する更新:

ワークフローに IsRunning メッセージを追加することには、いくつかの欠点があります。1 つには、1 つのブランチがループしてメッセージを待機し続け、他の実際のワークフロー ブランチが完了するとすぐに停止するようにする必要があります。確かに可能ですが、ワークフローが複雑になり、エラーの原因となる可能性があります。そして、それはビジネス上の問題の一部ではないので、私に関する限り、実際にはワークフローに関係がありません。また、ディスクからワークフローをロードし、そこにあることを伝えるためだけに保持する必要があることも意味します。終了した場合は、ワークフロー インスタンスがなかったことを示すエラーが発生するまで待機する必要があります。これは通常、デフォルトで 60 秒後にタイムアウト例外が発生することを意味します。それにスロットリングを追加すると、処理中の他のワークフロー インスタンスまたは SOAP 要求が多すぎるため、要求がキューに入れられる可能性があります。したがって、タイムアウトは、ワークフロー インスタンスが存在するが、システムの制約のために到達できないことを意味する場合があります。代わりに、単純なことを選択して、インスタンス ストア内のレコードがまだ利用可能かどうかを確認します。アクティブなブックマーク列からの追加情報は、ワークフローが何を待っているかを示します。過去に UI 要素を有効/無効にすることで UI を動的に更新するために使用した情報です。

于 2012-11-30T20:27:30.880 に答える