方法: ワークフローとワークフロー サービスの SQL 永続性を有効にするHow to: Enable SQL Persistence for Workflows and Workflow Services

このトピックでは、ワークフローとワークフロー サービスの永続性をプログラムと構成ファイルの両方から使用して有効にできるように、SQL Workflow Instance Store の機能を構成する方法について説明します。This topic describes how to configure the SQL Workflow Instance Store feature to enable persistence for your workflows and workflow services both programmatically and by using a configuration file.

Windows Server App Fabric を使用すると、永続化の構成のプロセスを簡潔化できます。Windows Server App Fabric simplifies the process of configuring persistence. 詳細については、次を参照してくださいApp Fabric 永続化の構成。For more information, see App Fabric Persistence Configuration

SQL Workflow Instance Store 機能を使用する前に、この機能においてワークフロー インスタンスの永続化に使用するデータベースを作成します。Before using the SQL Workflow Instance Store feature, create a database that the feature uses to persist workflow instances. .NET Framework 4.6.1.NET Framework 4.6.1 セットアップ プログラムによって、SQL Workflow Instance Store 機能に関連する SQL スクリプト ファイルが %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN フォルダーにコピーされます。The .NET Framework 4.6.1.NET Framework 4.6.1 set-up program copies SQL script files associated with the SQL Workflow Instance Store feature to the %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN folder. これらのスクリプト ファイルは、SQL Workflow Instance Store がワークフロー インスタンスの永続化に使用する SQL Server 2005 または SQL Server 2008 のデータベースに対して実行します。Run these script files against a SQL Server 2005 or SQL Server 2008 database that you want the SQL Workflow Instance Store to use to persist workflow instances. 最初に SqlWorkflowInstanceStoreSchema.sql ファイルを実行してから、SqlWorkflowInstanceStoreLogic.sql ファイルを実行します。Run the SqlWorkflowInstanceStoreSchema.sql file first and then run the SqlWorkflowInstanceStoreLogic.sql file.

注意

永続性データベースをクリーンアップして新しいデータベースにするには、%WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN にあるスクリプトを次の順序で実行します。To clean up the persistence database to have a fresh database, run the scripts in %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN in the following order.

  1. SqlWorkflowInstanceStoreSchema.sqlSqlWorkflowInstanceStoreSchema.sql
  2. SqlWorkflowInstanceStoreLogic.sqlSqlWorkflowInstanceStoreLogic.sql

重要

永続性データベースを作成しない場合、ホストがワークフローを永続化しようとしたときに、SQL Workflow Instance Store 機能によって次のような例外がスローされます。If you do not create a persistence database, the SQL Workflow Instance Store feature throws an exception similar to the following one when a host tries to persist workflows.

System.Data.SqlClient.SqlException:ストアド プロシージャ 'system.activities.durableinstancing.createlockowner'' が見つかりませんでした。System.Data.SqlClient.SqlException: Could not find stored procedure 'System.Activities.DurableInstancing.CreateLockOwner'

以下のセクションでは、SQL Workflow Instance Store を使用してワークフローとワークフロー サービスの永続性を有効にする方法について説明します。The following sections describe how to enable persistence for workflows and workflow services using the SQL Workflow Instance Store. SQL Workflow Instance Store のプロパティの詳細については、次を参照してください。 SQL Workflow Instance Store のプロパティします。For more information about properties of the SQL Workflow Instance Store, see Properties of SQL Workflow Instance Store.

WorkflowApplication を使用する自己ホスト型ワークフローの永続化の有効化Enabling Persistence for Self-Hosted Workflows that use WorkflowApplication

WorkflowApplication オブジェクト モデルを使用して、プログラムから SqlWorkflowInstanceStore を使用する自己ホスト型ワークフローの永続化を有効にすることができます。You can enable persistence for self-hosted workflows that use WorkflowApplication programmatically by using the SqlWorkflowInstanceStore object model. これを行う手順を次に示します。The following procedure contains steps to do this.

自己ホスト型ワークフローの永続化を有効にするにはTo enable persistence for self-hosted workflows

  1. System.Activities.DurableInstancing.dll への参照を追加します。Add a reference to System.Activities.DurableInstancing.dll.

  2. ソース ファイルの先頭にある既存の "using" ステートメントの後に、次のステートメントを追加します。Add the following statement at the top of the source file after the existing "using" statements.

    using System.Activities.DurableInstancing;
    
  3. 次のコード例に示すように、SqlWorkflowInstanceStore を構築して InstanceStoreWorkflowApplication に割り当てます。Construct a SqlWorkflowInstanceStore and assign it to the InstanceStore of the WorkflowApplication as shown in the following code example.

    SqlWorkflowInstanceStore store =
        new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI");
    
    WorkflowApplication wfApp =
        new WorkflowApplication(new Workflow1());
    
    wfApp.InstanceStore = store;
    

    注意

    使用している SQL Server のエディションによって、接続文字列のサーバー名は異なる可能性があります。Depending on your edition of SQL Server, the connection string server name may be different.

  4. Persist オブジェクトの WorkflowApplication メソッドを呼び出してワークフローを永続化するか、Unload メソッドを呼び出してワークフローを永続化およびアンロードします。Invoke the Persist method on the WorkflowApplication object to persist a workflow, or Unload method to persist and unload a workflow. また、PersistableIdle オブジェクトによって発生した WorkflowApplication イベントを処理して、Persist の適切なメンバー (Unload または PersistableIdleAction) を返すこともできます。You can also handle the PersistableIdle event raised by the WorkflowApplication object and return appropriate (Persist or Unload) member of PersistableIdleAction.

    wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
    {
        return PersistableIdleAction.Persist;
    };
    

注意

参照してください、方法。作成および実行 a Long Running Workflowの手順、チュートリアル入門ステップ バイ ステップの指示します。See the How to: Create and Run a Long Running Workflow step of the Getting Started Tutorial for step by step instructions.

WorkflowServiceHost を使用する自己ホスト型ワークフロー サービスの永続化の有効化Enabling Persistence for Self-Hosted Workflow Services that use the WorkflowServiceHost

WorkflowServiceHost クラスまたは SqlWorkflowInstanceStoreBehavior クラスを使用して、プログラムから DurableInstancingOptions を使用する自己ホスト型ワークフロー サービスの永続化を有効にすることができます。You can enable persistence for self-hosted workflow services that use WorkflowServiceHost programmatically by using the SqlWorkflowInstanceStoreBehavior class or the DurableInstancingOptions class.

SqlWorkflowInstanceStoreBehavior クラスの使用Using the SqlWorkflowInstanceStoreBehavior Class

SqlWorkflowInstanceStoreBehavior クラスを使用して、自己ホスト型ワークフロー サービスの永続化を有効にする手順を次に示します。The following procedure contains steps to use the SqlWorkflowInstanceStoreBehavior class to enable persistence for self-hosted workflow services.

SqlWorkflowInstanceStoreBehavior を使用して永続化を有効にするにはTo enable persistence using SqlWorkflowInstanceStoreBehavior

  1. System.ServiceModel.dll への参照を追加します。Add a reference to the System.ServiceModel.dll.

  2. ソース ファイルの先頭にある既存の "using" ステートメントの後に、次のステートメントを追加します。Add the following statement at the top of the source file after the existing "using" statements.

    using System.ServiceModel.Activities.Description;
    
  3. WorkflowServiceHost のインスタンスを作成し、ワークフロー サービスのエンドポイントを追加します。Create an instance of the WorkflowServiceHost and add endpoints for the workflow service.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
    
  4. SqlWorkflowInstanceStoreBehavior オブジェクトを作成して、動作オブジェクトのプロパティを設定します。Construct a SqlWorkflowInstanceStoreBehavior object and to set properties of the behavior object.

    SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior(connectionString);
    instanceStoreBehavior.HostLockRenewalPeriod = new TimeSpan(0, 0, 5);
    instanceStoreBehavior.InstanceCompletionAction = InstanceCompletionAction.DeleteAll;
    instanceStoreBehavior.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry;
    instanceStoreBehavior.InstanceEncodingOption = InstanceEncodingOption.GZip;
    instanceStoreBehavior.RunnableInstancesDetectionPeriod = new TimeSpan("00:00:02");
    host.Description.Behaviors.Add(instanceStoreBehavior);
    
  5. ワークフロー サービス ホストを開きます。Open the workflow service host.

    host.Open();
    

DurableInstancingOptions プロパティの使用Using the DurableInstancingOptions Property

SqlWorkflowInstanceStoreBehavior が適用される場合、DurableInstancingOptions.InstanceStoreWorkflowServiceHost は構成値を使用して作成された SqlWorkflowInstanceStore オブジェクトに設定されます。When the SqlWorkflowInstanceStoreBehavior is applied, the DurableInstancingOptions.InstanceStore on the WorkflowServiceHost is set to the SqlWorkflowInstanceStore object created using the configuration values. 同じ内容をプログラムから実行するには、次のコード例に示すように、DurableInstancingOptions クラスを使用せずに WorkflowServiceHostSqlWorkflowInstanceStoreBehavior プロパティを設定します。You can do the same programmatically to set the DurableInstancingOptions property of the WorkflowServiceHost without using the SqlWorkflowInstanceStoreBehavior class as shown in the following code example.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

WorkflowServiceHost を使用する WAS でホストされるワークフロー サービスの構成ファイルを使用した永続化の有効化Enabling Persistence for WAS-Hosted Workflow Services that use the WorkflowServiceHost using a Configuration File

構成ファイルを使用することで、自己ホスト型または Windows プロセス アクティブ化サービス (WAS) でホストされるワークフロー サービスの永続化を有効にできます。You can enable persistence for self-hosted or Windows Process Activation Service (WAS)-hosted workflow services by using a configuration file. WAS でホストされるワークフロー サービスは、自己ホスト型ワークフローのように WorkflowServiceHost を使用します。A WAS-hosted workflow service uses the WorkflowServiceHost as the self-hosted workflow services do.

SqlWorkflowInstanceStoreBehavior、簡単に変更できるようにするサービス動作、 SQL Workflow Instance Store XML 構成のプロパティ。The SqlWorkflowInstanceStoreBehavior, a service behavior that allows you to conveniently change the SQL Workflow Instance Store properties through XML configuration. WAS でホストされるワークフロー サービスの場合は、Web.config ファイルを使用します。For WAS-hosted workflow services, use the Web.config file. 次の構成例では、構成ファイルで sqlWorkflowInstanceStore という動作要素を使用して SQL Workflow Instance Store を構成する方法について説明します。The following configuration example shows how to configure the SQL Workflow Instance Store by using the sqlWorkflowInstanceStore behavior element in a configuration file.

<serviceBehaviors>
    <behavior name="">
        <sqlWorkflowInstanceStore
                    connectionString="Data Source=(local);Initial Catalog=DefaultPersistenceProviderDb;Integrated Security=True;Async=true"
                    instanceEncodingOption="GZip | None"
                    instanceCompletionAction="DeleteAll | DeleteNothing"
                    instanceLockedExceptionAction="NoRetry | BasicRetry |AggressiveRetry"
                    hostLockRenewalPeriod="00:00:30"
                    runnableInstancesDetectionPeriod="00:00:05">

        <sqlWorkflowInstanceStore/>
    </behavior>
</serviceBehaviors>

connectionString または connectionStringName プロパティの値が設定されていない場合、SQL Workflow Instance Store は既定の名前付き接続文字列 DefaultSqlWorkflowInstanceStoreConnectionString を使用します。If you do not set values for the connectionString or the connectionStringName property, the SQL Workflow Instance Store uses the default named connection string DefaultSqlWorkflowInstanceStoreConnectionString.

SqlWorkflowInstanceStoreBehavior が適用される場合、DurableInstancingOptions.InstanceStoreWorkflowServiceHost は構成値を使用して作成された SqlWorkflowInstanceStore オブジェクトに設定されます。When the SqlWorkflowInstanceStoreBehavior is applied, the DurableInstancingOptions.InstanceStore on the WorkflowServiceHost is set to the SqlWorkflowInstanceStore object created using the configuration values. 同じ内容をプログラムから実行するには、サービスの動作要素を使用せずに SqlWorkflowInstanceStoreWorkflowServiceHost と一緒に使用します。You can do the same programmatically to use the SqlWorkflowInstanceStore with WorkflowServiceHost without using the service behavior element.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

重要

ユーザー名やパスワードなどの機密情報は、Web.config ファイルに保存しないことをお勧めします。It is recommended that you do not store sensitive information such as user names and passwords in the Web.config file. Web.config ファイルに機密情報を保存する場合は、ファイル システムのアクセス制御リスト (ACL) を使用して、Web.config ファイルへのアクセスをセキュリティで保護する必要があります。If you do store sensitive information in the Web.config file, you should secure access to the Web.config file by using file system Access Control Lists (ACLs). さらに、保護することできますも構成ファイル内の構成値で説明したよう暗号化構成を使用して保護された構成情報します。In addition, you can also secure the configuration values within a configuration file as mentioned in Encrypting Configuration Information Using Protected Configuration.

.NET Framework 4.6.1.NET Framework 4.6.1 のインストールでは、SQL Workflow Instance Store 機能に関連する次の要素が Machine.config ファイルに追加されます。The .NET Framework 4.6.1.NET Framework 4.6.1 installation adds the following elements related to the SQL Workflow Instance Store feature to the Machine.config file:

  • 使用できるように、Machine.config ファイルに次の動作拡張機能要素を追加、 <sqlWorkflowInstanceStore > サービスの永続化を構成する構成ファイル内のサービス動作要素。Adds the following behavior extension element to the Machine.config file so that you can use the <sqlWorkflowInstanceStore> service behavior element in the configuration file to configure persistence for your services.

    <configuration>
        <system.serviceModel>
            <extensions>
                <behaviorExtensions>
                    <add name="sqlWorkflowInstanceStore" type="System.Activities.DurableInstancing.SqlWorkflowInstanceStoreElement, System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
                </behaviorExtensions>
            </extensions>
        <system.serviceModel>
    <configuration>