このトピックの内容は、Windows Workflow Foundation 4 に該当します。
このトピックでは、ワークフローとワークフロー サービスの永続性をプログラムと構成ファイルの両方から使用して有効にできるように、SQL Workflow Instance Store の機能を構成する方法について説明します。SQL Workflow Instance Store 機能を使用する前に、この機能においてワークフロー インスタンスの永続化に使用するデータベースを作成します。.NET Framework 4 セットアップ プログラムによって、SQL Workflow Instance Store 機能に関連する SQL スクリプト ファイルが %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN フォルダーにコピーされます。これらのスクリプト ファイルは、SQL Workflow Instance Store がワークフロー インスタンスの永続化に使用する SQL Server 2005 または SQL Server 2008 のデータベースに対して実行します。最初に SqlWorkflowInstanceStoreSchema.sql ファイルを実行してから、SqlWorkflowInstanceStoreLogic.sql ファイルを実行します。
![]() |
---|
永続性データベースをクリーンアップして新しいデータベースにするには、%WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN にあるスクリプトを次の順序で実行します。
|
![]() |
---|
永続性データベースを作成しない場合、ホストがワークフローを永続化しようとしたときに、SQL Workflow Instance Store 機能によって次のような例外がスローされます。 System.Data.SqlClient.SqlException: ストアド プロシージャ 'System.Activities.DurableInstancing.CreateLockOwner' が見つかりませんでした。 |
以下のセクションでは、SQL Workflow Instance Store を使用してワークフローとワークフロー サービスの永続性を有効にする方法について説明します。SQL Workflow Instance Store のプロパティ詳細情報、「SQL Workflow Instance Store のプロパティ」を参照してください。
WorkflowApplication を使用する自己ホスト型ワークフローの永続化の有効化
SqlWorkflowInstanceStore オブジェクト モデルを使用して、プログラムから WorkflowApplication を使用する自己ホスト型ワークフローの永続化を有効にすることができます。これを行う手順を次に示します。
自己ホスト型ワークフローの永続化を有効にするには
System.Activites.DurableInstancing.dll への参照を追加します。
ソース ファイルの先頭にある既存の "using" ステートメントの後に、次のステートメントを追加します。
using System.Activities.DurableInstancing;
次のコード例に示すように、SqlWorkflowInstanceStore を構築して WorkflowApplication の InstanceStore に割り当てます。
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI"); WorkflowApplication wfApp = new WorkflowApplication(new Workflow1()); wfApp.InstanceStore = store;
注 :
使用している SQL Server のエディションによって、接続文字列のサーバー名は異なる可能性があります。 WorkflowApplication オブジェクトの Persist メソッドを呼び出してワークフローを永続化するか、Unload メソッドを呼び出してワークフローを永続化およびアンロードします。また、WorkflowApplication オブジェクトによって発生した PersistableIdle イベントを処理して、PersistableIdleAction の適切なメンバー (Persist または Unload) を返すこともできます。
wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { return PersistableIdleAction.Persist; };
![]() |
---|
SqlWorkflowInstanceStore を使用したワークフローの永続化の有効化のサンプルについては、「永続性」の「ワークフロー アプリケーションの永続化」のサンプルを参照してください。手順の詳細については、「チュートリアル入門」の「長時間にわたって実行されるワークフローを作成して実行する方法」の手順を参照してください。 |
WorkflowServiceHost を使用する自己ホスト型ワークフロー サービスの永続化の有効化
SqlWorkflowInstanceStoreBehavior クラスまたは DurableInstancingOptions クラスを使用して、プログラムから WorkflowServiceHost を使用する自己ホスト型ワークフロー サービスの永続化を有効にすることができます。
SqlWorkflowInstanceStoreBehavior クラスの使用
SqlWorkflowInstanceStoreBehavior クラスを使用して、自己ホスト型ワークフロー サービスの永続化を有効にする手順を次に示します。
SqlWorkflowInstanceStoreBehavior を使用して永続化を有効にするには
System.ServiceModel.dll への参照を追加します。
ソース ファイルの先頭にある既存の "using" ステートメントの後に、次のステートメントを追加します。
using System.ServiceModel.Activities.Description;
WorkflowServiceHost
のインスタンスを作成し、ワークフロー サービスのエンドポイントを追加します。WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress)); host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
SqlWorkflowInstanceStoreBehavior
オブジェクトを作成して、動作オブジェクトのプロパティを設定します。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);
ワークフロー サービス ホストを開きます。
host.Open();
![]() |
---|
SqlWorkflowInstanceStoreBehavior クラスを使用したワークフロー サービスの永続化の有効化のサンプルについては、「永続性」の「組み込みの構成」のサンプルを参照してください。
|
DurableInstancingOptions プロパティの使用
SqlWorkflowInstanceStoreBehavior
が適用される場合、WorkflowServiceHost
の DurableInstancingOptions.InstanceStore
は構成値を使用して作成された SqlWorkflowInstanceStore
オブジェクトに設定されます。同じ内容をプログラムから実行するには、次のコード例に示すように、SqlWorkflowInstanceStoreBehavior
クラスを使用せずに WorkflowServiceHost
の DurableInstancingOptions プロパティを設定します。
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
WorkflowServiceHost を使用する WAS でホストされるワークフロー サービスの構成ファイルを使用した永続化の有効化
構成ファイルを使用することで、自己ホスト型または Windows プロセス アクティブ化サービス (WAS) でホストされるワークフロー サービスの永続化を有効にできます。WAS でホストされるワークフロー サービスは、自己ホスト型ワークフローのように WorkflowServiceHost を使用します。
SqlWorkflowInstanceStoreBehavior
は、XML 構成によって SQL Workflow Instance Store のプロパティを簡単に変更できるサービスの動作です。WAS でホストされるワークフロー サービスの場合は、Web.config ファイルを使用します。次の構成例では、構成ファイルで sqlWorkflowInstanceStore
という動作要素を使用して SQL Workflow Instance Store を構成する方法について説明します。
<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
を使用します。
SqlWorkflowInstanceStoreBehavior
が適用される場合、WorkflowServiceHost
の DurableInstancingOptions.InstanceStore
は構成値を使用して作成された SqlWorkflowInstanceStore
オブジェクトに設定されます。同じ内容をプログラムから実行するには、サービスの動作要素を使用せずに SqlWorkflowInstanceStore
を WorkflowServiceHost
と一緒に使用します。
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
![]() |
---|
ユーザー名やパスワードなどの機密情報は、Web.config ファイルに保存しないことをお勧めします。Web.config ファイルに機密情報を保存する場合は、ファイル システムのアクセス制御リスト (ACL) を使用して、Web.config ファイルへのアクセスをセキュリティで保護する必要があります。また、「保護された構成を使用した構成情報の暗号化」で説明しているように、構成ファイル内の構成値をセキュリティで保護することもできます。 |
SQL Workflow Instance Store 機能に関連する Machine.config の要素
.NET Framework 4 のインストールでは、SQL Workflow Instance Store 機能に関連する次の要素が Machine.config ファイルに追加されます。
構成ファイルで <
sqlWorkflowInstanceStore
> サービスの動作要素を使用してサービスの永続化を設定できるように、Machine.config ファイルに次の動作拡張要素を追加します。<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>