1

カスタム フレームワーク (ASP.NET を拡張しただけ) に基づいて、いくつかの ASP.NET アプリケーション (顧客ごとに 1 つ) を実行しています。各 Web アプリケーションは独自のデータベースを使用します (接続文字列の初期カタログ)。ここで、ワークフロー機能をアプリケーション (それぞれのフレームワーク) に追加したいと考えています。特定のワークフローはすべてのアプリケーションで同じですが、各ワークフローの一部の初期設定のみが異なります。たとえば、あるアプリケーションでは電子メールがユーザー X に送信され、別のアプリケーションではユーザー Y に送信されます。

問題は、1 つのワークフロー エンジン (永続化のための 1 つのデータベース) をインストールし、これをすべての Web アプリケーションのすべてのワークフローで共有できるかどうかです。

もしそうなら、ワークフロー エンジンはどのようにして特定のワークフローがどの Web アプリケーションに属しているかを知るのでしょうか? アプリケーション識別子をワークフローのどこかに保存する必要がありますか?

提案をありがとう!

4

2 に答える 2

1

すべてのワークフローが同じである場合は、顧客ごとに 1 つの WorkflowServiceHost を使用し、電子メール アドレスなどの追加情報を起動パラメータとして提供できます。ただし、異なるクライアントのワークフローを微調整する場合は、特定のクライアントごとに異なるホストを作成します。もちろん、後でいつでも追加できます。

于 2010-05-18T16:59:51.947 に答える
-1

アプリケーション間でワークフローを再利用できる場合は、単一の持続性データベースを使用できます。

ワークフローでカスタム プロパティを有効にするには、AppId を使用するには、ExternalDataExchangeAttribute でマークされたローカル通信インターフェイスが必要です。

カスタム プロパティを定義します... AppId

[Serializable()]
public class MyWorkflowEventArgs : ExternalDataEventArgs
{

    private Guid _AppId;

...

次に、各ワークフローを開始するときに、辞書を介してカスタム プロパティを渡すことができます...

       System.Collections.Generic.Dictionary<String, Object> parameters = new System.Collections.Generic.Dictionary<String, Object>();

        Guid appId;

        StartWorkflowRuntime();

        //Define the parameters for the workflow
        parameters.Add("appId", appId);

        //  create the workflow instance
        WorkflowInstance workflowInstance;
        ManualWorkflowSchedulerService manualWorkflowSchedulerService;
        workflowInstance =
            (HttpContext.Current.Application[WorkflowRuntimeCacheKey] as WorkflowRuntime)
                .CreateWorkflow(workflowclass, parameters);     

        //  start the new workflowinstance
        workflowInstance.Start();

次に、どのアプリがそれをインスタンス化したかをワークフロー内で追跡できます...

于 2010-05-18T17:22:44.177 に答える