3

ビジネス ロジックの一部を WF4 ワークフローに置き換えようとしています。
これらはすべて非常に典型的なワークフローです。ユーザー アクションによるインスタンスの作成、データベースへの取り組み、次のユーザーの確認などです。

ワークフロー ホストの要件は次のとおりです。

  1. データベースに格納された XAML 定義からワークフローを作成する (DynamicActivity)
  2. 異なるバージョンでワークフローをサポート
  3. 長時間ベースのイベントをサポートします (現在、通知は 5 日後、ワークフローは 30 日後にロールバックされます)。
  4. 多くのワークフローの多くのインスタンスをサポートします (約 4000 の進行中の 10 のワークフローを特定しましたが、一度に処理されるのはそのうちのほんのわずかです)。
  5. サービスの再起動後にすべての状態を保持 (時間ベースのイベントを含む)
  6. 呼び出し元のユーザーを認証します (可能な場合は WindowsAuthentication)

移行作業の一環として、「WCF ワークフロー サービス アプリケーション」プロジェクトを使用していくつかの POC を構築しましたが、私が見る限り、これらはすぐには可能ではありません。

#2 は WCF ルーティングを介して行われ、WSH が #3 を処理すると理解しています (#5 を考えると、これは本当ですか?) が、#1 がデフォルトからどのように機能するかわかりませんプロジェクト構造。
私は WorkflowApplication インスタンスを使用して #1 を解決しましたが、これはブックマークを使用して入力イベントごとに再開することに依存しており、アイドル状態のワークフローをアンロードせずに WorkflowApplication がニーズに合わせて拡張されるとは確信していませんでした。これにより Delay アクティビティが中断されます。

だから、あなたがここまで私に固執しているなら:

  • 既定のプロジェクトで、またはその一部を自分で実装することによって、WSH を使用してこれらすべてを実現する方法はありますか?
  • 長い期間とワークフローのアンロードと再ロードが必要になる可能性があることを考えると、真のウェイク時間を記録し、ホスト プロセスによって再開されるワークフローをアンロードする独自の「DurableDelay」アクティビティを作成する方がよいでしょうか?
  • WSH で対応できない場合、既存の代替手段はありますか?

ワークフローのライフサイクルを処理するために独自のホスト サービスを作成することも嫌いではありません。また、提案された設計も作成しましたが、既製のソリューションがあることが判明した場合、そのルートを開始したくありませんでした。 .

乾杯

4

2 に答える 2

1

を使用して、ファイル システムではなくデータベースからワークフローをロードすることで、 #1を達成できます。VirtualPathProvider詳細については、「データベース リポジトリを使用してワークフロー サービスを構築する方法」を参照してください。

ワークフローのバージョン管理 ( #2 ) は .NET 4.0 ではサポートされていませんが、.NET 4.5 では実際のバージョン管理がより適切にサポートされています。Windows Workflow Foundation 4.5 の新機能を参照してください。ただし、開始後にワークフローを変更する必要がなく、新しいインスタンスを新しいバージョンで開始する必要があるだけで、既に実行中のインスタンスは以前のワークフロー定義を使用して終了できる場合は、データベース レベルでバージョン管理を実装し、それぞれを処理するだけで済みます。ワークフロー定義バージョンには、異なるワークフロー サービスがあります。

次に、IIS でホストされているワークフロー サービス ( AppFabric ) を SQL Server インスタンス ストアと共に使用して、#3#4、および#5をほぼ無料で取得できます。

最後に#6で、.NET 4.0 を使い続けると仮定すると、 WF Security Pack CTP 1を見ることができます。

于 2013-02-01T12:18:19.767 に答える
0

私は同じ種類のワークフローを開発しています。

また、最初にワークフローサービスについても説明しましたが、ワークフローがビジネスレイヤーに完全に統合されているため、WCFを使用してワークフローにアクセスしたくありませんでした。
そのため、現在、WorkflowApplicationをホストとして使用しているので、ホストをインスタンス化して操作できます。
最大の問題は、遅延アクティビティを使用するワークフローを再開することでした(データベースで自分自身をチェックする必要があります)

于 2013-02-05T15:42:29.850 に答える