ワークフロー管理サービス

ワークフロー管理サービス (WMS) は Windows のサービスであり、ワークフロー サービス インスタンスの次の管理サービスを提供します。

  • ワークフロー サービス インスタンスのアクティブ化。WMS は、インスタンスがアクティブ化可能になると、インスタンス ストアのワークフロー サービス インスタンスをアクティブ化します。インスタンス ストアのワークフロー サービス インスタンスは、インスタンスが実行可能となり、インスタンスと一致するサービス ホストがローカル コンピューター上で実行されていない場合にアクティブ化可能と見なされます。次の一覧ではインスタンスが実行可能となる理由を示します。

    • 遅延アクティビティが完了するのを待機している間にインスタンスがアンロードおよび永続化され、遅延アクティビティが完了した場合。

    • インスタンスのロード中にサービス ホストがシャットダウンした場合。

    • インスタンスのインスタンス ロックが期限切れの場合。

  • ユーザー コントロール コマンドの実行。インスタンス ストアのインスタンス コントロール プロバイダーは、Windows PowerShell インスタンス制御コマンドレットからインスタンス ストアのキューで受信するコマンドを追加します。このキューは、インスタンス コントロール プロバイダーにより作成および管理されます。WMS はキューからコマンドを受信して実行し、その後、コマンドが正常に実行されたらキューからコマンドを削除します。

以降のこのトピックでは、これらのサービスを詳しく説明します。WMS のインストールおよび構成については、「ワークフロー管理サービスのインストールと構成」を参照してください。

ワークフロー サービス インスタンスのアクティブ化

既定では、WMS はアクティブ化可能なワークフロー インスタンスを監視するのに必要なインスタンス ストアを自動的に検索します。このため、サービスの開始中および構成ファイルが変更された場合に、ルート、サイト、およびアプリケーション レベルの Web.config ファイルをスキャンします。また、WMS に自動的にインスタンス ストアを検索させるのではなく、ユーザーが WMS に監視させる特定のインスタンス ストアを指定することもできます。

WMS は InstanceStore オブジェクトを作成し、見つかった各インスタンス ストアについて HasActivatableWorkflowEvent をサブスクライブします。インスタンス ストアは、ストア内でアクティブ化可能なワークフローを見つけると、HasActivatableWorkflowEvent を発生させます。この後、インスタンス ストアはストア上で QueryActivatableWorkflowsCommand が一度呼び出されるまで、監視を停止します。

WMS は HasActivatableWorkflowEvent を受信するとインスタンス ストアに対して QueryActivatableWorkflowsCommand を実行し、ワークフロー ホストを作成するのに使用するアクティブ化パラメーターを取得します。

その後、WMS はアクティブ化される必要のあるインスタンスを持つサービスを含むアプリケーションが対応しているサービス管理サービスを呼び出し、それに対してアクティブ化パラメーターを渡します。AppFabric は WCF サービスであるサービス管理サービスを、serviceManagement 属性が有効となっているアプリケーションすべてに自動的に追加します。サービス管理サービスはサービス アクティブ化エンドポイントを公開し、WMS はサイト名、仮想アプリケーション パス、および既知のサービス アクティブ化エンドポイント アドレスを使用して構築するアドレスを使用して、このサービス アクティブ化エンドポイントにアクセスします。WMS は、このエンドポイントに net.pipe バインドを使用します。このサービスの詳細については、「サービス管理サービス」を参照してください。

サービス管理サービスは、WMS から受信するアクティブ化パラメーターを使用してワークフロー サービス ホストをアクティブ化します。サービス ホストはインスタンス ストア (SQL ワークフロー インスタンス ストアなど) を作成し、ストア上のメソッドを呼び出してインスタンス ストアからメモリにワークフロー サービス インスタンスをロードします。

ワークフロー管理サービス - インスタンスのアクティブ化

警告

WMS は、構成ファイル内の SQL ワークフロー インスタンス ストア (SWIS) ビヘイビアーおよび対応するインスタンス ストア定義に対する変更を即時に検出し、それらのストアの監視を開始します。ただし、アプリケーションは、アプリケーション ドメインがリサイクルするまで、古いバージョンの構成ファイル内の SWIS ビヘイビアーで指定されたインスタンス ストアを引き続き使用します。アプリケーション ドメインがリサイクルされるのは、httpRuntime 要素の delayNotificationTimeout 属性によって指定される期間が経過した後です。たとえば、delayNotificationTimeout が 5000 に設定されている場合 (<httpRuntime delayNotificationTimeout = "5000" />)、アプリケーション ドメインがリサイクルされるのはあと 5,000 秒経過した後です。

警告

合計で 1,000 以上のサービスを含むアプリケーションまたはアプリケーション プールを無効にした場合、WMS はアクティブ化可能なサービス インスタンスをそれ以上アクティブ化しない可能性があります。回避策として、そのようなアプリケーション/アプリケーション プールを非アクティブ化または無効化する前に、アプリケーション/アプリケーション プールに属するサービスのインスタンスを中断します。

ユーザー コントロール コマンドの実行

Windows PowerShell コマンドレットを使用してワークフロー サービス インスタンスに対してコマンドを発行する場合、インスタンス コントロール プロバイダーは、サービスが使用するインスタンス ストアのコマンド キューにコマンドを追加します。コマンド キューは、インスタンス コントロール プロバイダーにより管理されます。

WMS は、コマンドを監視するのに必要なインスタンス ストアを自動的に見つけます。このため、開始中および構成ファイルが変更された場合に、ルート、サイト、およびアプリケーション レベルの Web.config ファイルをスキャンします。WMS は、見つけたインスタンス ストアそれぞれについてインスタンス コントロール プロバイダーを作成し、一定の間隔でこのプロバイダーをポーリングしてコマンドを確認します。WMS は、インスタンス コントロール プロバイダーで BeginTryReceive メソッドを呼び出してコマンドを受信します。

このインスタンス コントロール プロバイダーはコマンドを取り出しますが、インスタンス ストアのコマンド キューからコマンドを削除せずに WMS に返します。プロバイダーは、コマンド キュー内のコマンドに短い期限のあるロックを設定します。

その後、WMS はワークフロー サービス ホストが公開するインスタンス制御エンドポイント (ICE) の適切なメソッドを呼び出し、目的のワークフロー サービス インスタンスに対してコマンドを実行します。WMS は、インスタンス制御エンドポイントが net.pipe バインドおよびトランスポート セキュリティを有効にすることを必須とします。WMS は、サイト名、仮想サービス パス、および既知の ICE パスを組み合わせてエンドポイントアドレスを構築します。インスタンス コントロール プロバイダーは、サイト名および仮想サービス パス情報を提供します。ICE バインドは、net.pipe バインドにハードコードされます。

コマンドが正常に実行されると、WMS はインスタンス コントロール プロバイダーで Complete メソッドを呼び出し、プロバイダーはコマンド キューからコマンドを削除します。コマンドの実行に失敗した場合、WMS はインスタンス コントロール プロバイダーで失敗に対して Abandon メソッドを呼び出します。コマンドをコマンド キューから削除するか、削除せずに再試行するかはプロバイダーが決定します。SQL ワークフロー インスタンス ストアのインスタンス コントロール プロバイダーは、コマンドを 5 回試行してからコマンド キューから削除します。コマンドの実行中に WMS がクラッシュした場合は、ロックが最終的には期限切れとなり、同じ WMS インスタンスがコマンドを取得するか、または他の WMS インスタンスが後で取得します。

ワークフロー管理サービス - コマンドの実行

Microsoft 分散トランザクション コーディネーター (MSDTC) が有効化され、MSDTC によって受信通信と送信通信が有効化された場合、インスタンス制御コマンドはトランザクション方式で実行されます。たとえば、ワークフロー サービス インスタンスを中断すると、コマンドが処理された直後に、[中断] の状態が IIS マネージャーに表示されるか、コマンドレットによって返されます。ただし、MSDTC が無効化されているか、正しく構成されていない場合、インスタンス制御コマンドは非トランザクション方式で実行されます。この場合、インスタンスがアンロードされ、インスタンス ストアに保持されるまで、インスタンスの状態は [中断] に更新されません。インスタンスが指定の期間より長くアイドル状態であるためです ([アイドル時にインスタンスをアンロードする] 設定)。MSDTC 設定を変更した場合は、更新された MSDTC 設定がサービスによって検出されるように、WMS を再起動する必要があります。

ヒント

インスタンス制御コマンドが予期した以上に長く保留状態にあることに気付いた場合は、サーバー ファーム内の各サーバー上で WMS が実行されているかどうかを確認してください。インスタンスが特定のサーバー上で現在実行されているものの (監視情報に基づき)、そのインスタンスに対して発行された制御コマンドが実行されていない場合は、そのサーバー上で WMS が実行されているかどうかを確認する必要があります。

警告

DTC 設定の [受信を許可する] および [送信を許可する] がオンになっている場合、ワークフロー管理サービスはトランザクション コマンドを使用します。DTC を無効にする場合は、これらの設定も明示的に無効にして、非トランザクション コマンドが使用されるようにしてください。

サーバー ファーム環境への対応

サーバー ファーム内の各ノードは、通常、WMS インスタンスを 1 つ実行します。WMS インスタンスは複数のインスタンス ストアを監視できます。ノードは異なる Windows ID において複数の WMS インスタンスを実行できます。ノード上のインスタンス ストアについて、WMS インスタンスを 1 つのみ実行することをお勧めします。同じインスタンス ストアを監視する同じノード上で WMS インスタンスを複数実行すると、拡張性の問題が発生する可能性があります。

1 つ前のノードで実行していたノードが他のノード上の WMS により取り出されて、このノード上でアクティブ化される場合があります。これは、サーバー ファーム全体を通じての WMS の負荷のバランスを取るのに役立ちます。

ワークフロー インスタンスのコントロール コマンドを発行する場合、このワークフロー インスタンスは、ファーム内で実行されている場合も実行されていない場合もあります。WMS は、ワークフローを実行しているコンピューターにコマンドを配信するか、またはローカルのコンピューターにワークフローをロードしてコマンドを実行するよう指示します。これにより、ユーザーはインスタンスが実行されているコンピューターが不明でも、インスタンスにコマンドを発行できます。

依存機能

以下の点が、ワークフロー管理サービス (WMS) に当てはまります。

  • WMS は、IIS/WAS 環境で WorkflowServiceHost を使用してホストされているワークフロー サービス インスタンスに対してのみ、コマンドを有効にして実行します。WMS は、異なるホスト環境内にある、または異なるホストを使用してホストされているワークフロー サービスには対応しません。

  • WMS は、耐久性のある状態永続化のためにインスタンス ストアを使用するワークフロー サービス インスタンスをアクティブ化します。

  • WMS は、サービス管理サービスを提供するアプリケーションに属するワークフロー サービス インスタンスをアクティブ化します。WMS は、サービス管理サービスを使用してサービス ホストをアクティブ化し、このサービス ホストはインスタンス ストアからインスタンスをロードします。

  • WMS が機能するには、サイトに net.pipe バインディングが追加されていることと、サービスが含まれるアプリケーションで net.pipe プロトコルが有効化されていることが必要です。アプリケーションで net.pipe プロトコルが有効化されていない場合、WMS はイベント ログにエラーを記録します。

  • WMS は、ワークフロー サービス インスタンスがインスタンス制御エンドポイント (ICE) を公開することを必須とします。WMS はこのエンドポイントを使用して、ワークフロー サービス インスタンスに対して Suspend や Resume などのコマンドを発行します。

  • WMS は、インスタンス ストア プロバイダーおよびインスタンス コントロール プロバイダーに同梱のインスタンス ストアすべてで動作します。

  • WMS は、インスタンスがアクティブ化可能となった場合にインスタンス ストアが HasActivatableWorkflowsEvent を発生させることを必須とします。

ヒント

WMS のセキュリティ関連情報の詳細については、「永続化ストアのセキュリティ構成」を参照してください。

セキュリティ

ワークフロー管理サービス (WMS) は、ワークフロー サービス ホストが公開するインスタンス制御エンドポイント (ICE) に接続して、ワークフロー サービス インスタンスを制御し、Web アプリケーションが公開するサービス管理エンドポイントに接続してワークフロー サービス ホストを開始してから、ワークフロー サービス インスタンスをロードする必要があります。AS_Administrators グループは、これらの両方のエンドポイントにアクセスできます。AppFabric ワークフロー管理サービスのセキュリティ識別子 (SID) は、このグループのメンバーです。このため、WMS を実行しているアカウントを AS_Administrators グループに明示的に追加する必要はありません。

次の一覧は、WMS が使用するインスタンス ストアおよび構成ファイルを保護するためのガイドラインを示します。

  • WMS は接続文字列などの構成情報を構成ファイルから読み取り、メモリにロードします。WMS はこの時点では暗号化された接続文字列を処理しません。したがって、接続文字列は単純なテキスト形式である必要があります。悪意のあるユーザーがいれば、メモリ内の重要情報 (接続文字列内のユーザー名やパスワードなど) にアクセスする可能性があります。そのため、構成ファイル内で定義される接続文字列には重要情報を指定しないでください。

    Web.config ファイルに格納される接続文字列に対しては、統合 Windows 認証を使用することをお勧めします。統合 Windows 認証を使用できず、Web.config ファイルで定義された接続文字列のユーザー名およびパスワードを指定する場合、構成ファイルに適切な ACL (アクセス制御リスト) を設定します。WMS がアクセスする必要のある Web.config ファイルへのアクセス権を AS_Administrators グループに必ず与えます。ただし、ACL を設定しても、悪意のあるユーザーがメモリ内の接続文字列にアクセスすることを防ぐことにはならない点に注意が必要です。

  • SQL 接続文字列に「;Encrypt=yes」を追加して、暗号化された SQL 通信を有効にしてください。SqlConnectionStringBuilder クラスを使用して接続文字列を作成する場合は、Encrypt プロパティを true に設定します。サーバーで暗号化通信を有効化することの詳細については、https://go.microsoft.com/fwlink/?LinkID=187283 を参照してください。アプリケーションと SQL Server 間の通信のセキュリティを保護しないと、悪意のあるユーザーが SQL Server データベースに対してコマンドを操作または実行する可能性があります。

  • コマンド キューは、資格情報を保持しません。SQL の WorkflowAdministrators の役割にマップされている AS_Administrators グループのメンバーであるユーザーにはインスタンス ストア内のすべてのインスタンスを制御する権限があり、特定の種類のインスタンスを制御する権限はありません。このため、各ユーザーにより制御されるべきでないインスタンスは別のインスタンス ストアに格納される必要があり、これらのインスタンス ストアに対する SQL の WorkflowAdministrators の役割は、他の Windows グループにマップされる必要があります。

  • Web.config ファイルが変更されるたびに、WMS はファイルを読み取り、ストアの定義がファイルに追加またはファイルから削除されていないか確認します。認証されていないユーザーが WMS ファイルの処理をトリガーしないよう、Web.config ファイルへの書き込みアクセス権を制限することをお勧めします。

  • 追跡レベルによっては、AppFabric 監視機能は大量のデータを収集します。監視ストアおよび永続化ストアは、同じデータベースに併置しないことをお勧めします。これにより、監視ストアがオーバーフローした場合も永続化サブシステムには影響しません。

次の表は、コマンド キューおよび永続化データベースへのアクセスを保護する SQL の役割を示します。この表の内容は、SQL ワークフロー インスタンス ストアにのみ適用されます。

SQL の役割 説明 Windows グループ

WorkflowAdministrators

この役割のメンバーは、コマンド キューにコマンドを登録 (追加) できます。(Windows PowerShell コマンドレットの使用などにより) インスタンスを制御するユーザーは、この役割のメンバーである必要があります。

AS_Administrators

WorkflowManagementServiceUsers

この役割のメンバーは、コマンド キューからコマンドを削除できます。WMS を実行するアカウントは、コマンド キューに格納されたコマンドを取り出せるよう、この役割のメンバーである必要があります。

AS_Administrators

WorkflowActivationUsers

この役割のメンバーは、永続化データベースで永続化されており、実行準備が完了しているワークフロー サービス インスタンスをアクティブ化できます。

AS_Administrators

InstanceStoreObservers

この役割のメンバーはインスタンス ストアにインスタンスを照会でき、また、ストアのコマンド キューからコマンドを取り出せます。

AS_Administrators および AS_Observers

InstanceStoreUsers

この役割のメンバーは、インスタンスをロードおよび保存できます。ロードおよび保存のアクションは、ワークフローを実行するサービス ホストにより実行されます。

サービス Service1 のインスタンスがインスタンス ストア Store1 で永続化されると、サービス ホストを実行するアプリケーション プール AppPool1 は、Store1 に対するユーザー権限を持つ ID で実行される必要があります。

IIS_USRS

永続化のセキュリティについてのシナリオ別ガイドについては、「永続化ストアのセキュリティ構成」を参照してください。

関連項目

概念

永続化ストアのセキュリティ構成
ワークフロー管理サービスのインストールと構成

  2012-03-05