1

WF4で単純なオーダーマネージャーwfサービス(ステートマシン)を作成しました。

シンプルなステートマシンのワークフロー

注文(EFエンティティ)プロパティ:Id、IsExport、NumOfProduct、ProductName、Status(待機中、承認済み、拒否済み)。

ステートマシンの状態:
1。OrderReceived(検証->応答アクティビティ)
2。待機中(空)-遷移:
更新(注文アクティビティの更新)->待機状態の承認(ステータスフィールドの割り当て、注文および応答アクティビティの更新)->最終状態
3 。最終状態。

相関キー:Order.Id

実装にはいくつかの疑問がありました。

  1. WFは、注文インスタンスの1つのフローを管理でき、注文フローと注文エンティティは1対1の関係にあります。問題は、状態フィルター(承認された注文や待機中の注文など)に従ってエンティティのリストをどこでどのように実装する必要があるかということです。リストには、WCFサービスメソッドを介してアクセスできる必要があります。

  2. バッチデータ処理を管理するためのベストプラクティスは何ですか。(例:複数注文の承認。クライアントの「Foreach」は必須のslnではありません。)

  3. 注文の状態は、「状態アクティビティの永続化されたインスタンス」と、データベース内のエンティティのステータスフィールドによっても表されます。エンティティの状態を決定するためのベストプラクティスは何ですか?定義された状態のアクティブな永続化されたアクティビティインスタンスを一覧表示するか、状態フィルターパラメーターに従って(アクティビティによって)データベースからエンティティを選択しますか?

どんな助けでもいただければ幸いです。

4

2 に答える 2

1

良い質問です!

1番目と 3 番目の質問に答えると、これにはいくつかの可能なアプローチがあります。いずれも、必要な注文を列挙するカスタム WCF サービスを作成する必要があります。これはおそらくWF サービスではありません。REST または OData サービスの可能性があります。サービスをどのように実装しますか?

  1. EF を介してデータベースにクエリを実行することで、完全に実行できます。これは WF にまったく依存せず、おそらく最も簡単な方法です。ワークフローは状態が変化するたびにデータベース レコードを更新し、サービスはその値を読み取るだけで済みます。

  2. WF が提供する追跡メカニズムと、Ron Jacobs が質問への回答で参照している拡張機能を利用できます。追跡インフラストラクチャについては、MSDNで説明されています。メモリ内の追跡オブジェクトを使用して、アクティブなワークフローの状態を取得できます。ただし、これはおそらく IIS/WF サービスではうまく機能しません。IIS/WF サービスは自動的に永続化され、休止状態になるとアンロードされます。追跡機能を使用して状態レコードをデータベースに書き込む方がよいでしょう。カスタム サービスは、この追跡データベースにクエリを実行するだけです。

WF サービスを通じて発生した状態の変更と更新に関する包括的な情報が必要でない限り、最初の提案で十分です。

2 番目の質問については、もう少し複雑です。承認待ちの注文を一覧表示する REST サービスを作成するとします。これらの注文を表示する Web ページを作成すると、ユーザーは承認したい注文を確認できます。現在、更新する必要があるワークフローの数は、彼が承認した注文の数と同じです。

おっしゃるように、Web サービスを複数回呼び出すこともできますが、大量の注文の場合は不要なオーバーヘッドになります。

代替手段は何ですか?注文 ID の配列を受け取る非 WF サービスで、カスタム サービス メソッドを記述する必要があります。そのサービスは、それぞれを更新するために WF サービスを複数回呼び出す必要があります。WF サービスは同じマシン上の別のサービスから呼び出されるため、HTTP バインディングの 1 つの代わりに .Net 名前付きパイプ バインディングを使用して、オーバーヘッドを大幅に削減できます。

Entity Framework もバッチ更新をサポートしていないことに注意してください。データベースの更新もバッチ処理する場合は、ストアド プロシージャまたはカスタム SQL を記述する必要があります。

これらすべてに努力する価値はありますか? おそらく!WCF と名前付きパイプ バインドの使用は、WF ではかなり標準的です。名前付きパイプ用に Windows Activation Serviceを構成する必要があります。また、 AppFabric for Windows Serverをまだ使用していない場合は、調べてみてください。WF サービス用の非常に優れた管理ツールがいくつか追加されているからです。

于 2012-04-19T18:05:14.500 に答える