Share via


インスタンス クエリおよびインスタンス制御

このサンプルは、永続化ストアのクエリ プロバイダーおよびコントロール プロバイダーの使用方法を示しています。ユーザーはクエリ プロバイダーが公開する C# API を使用して、永続化ストアに保存されているインスタンスに対してクエリを実行できます。また、コントロール プロバイダーが公開する C# API を使用して、永続化ストアに保存されたインスタンスに対してコントロール コマンド (suspend、resume、cancel、terminate、および delete) を発行できます。

このサンプルには、WF テスト サービス、インスタンスに対してクエリを実行するための Windows コンソール アプリケーション、およびインスタンスを制御するための Windows コンソール アプリケーションが含まれています。

ヒント

サンプルは学習用としてのみ提供されています。運用環境での使用を目的としておらず、運用環境でのテストも行われていません。サンプルについてマイクロソフトのテクニカル サポートは提供されません。

前提条件

  • インターネット インフォメーション サービス (IIS) バージョン 7.0

  • 永続化ストアが初期化済みであること

  • Visual Studio 2010 と Windows Server AppFabric が同じコンピューターにインストールされていること

サンプルの場所とファイル

Readme ドキュメントは、<サンプル>\Samples\Hosting\InstanceQueryAndControl にあります。

このサンプルの実行に必要なすべてのファイルは、<サンプル>\Samples\Hosting\InstanceQueryAndControl にあります。

  • InstanceControl フォルダーには、インスタンス制御のサンプル アプリケーションに必要なすべてのファイルが含まれています。

  • InstanceQuery フォルダーには、インスタンス クエリのサンプル アプリケーションに必要なすべてのファイルが含まれています。

  • TestWorkflow フォルダーには、サンプル ワークフローに必要なすべてのファイルが含まれています。

  • ソリューション ファイル InstanceQueryAndControl.sln では、サンプルのすべての項目をビルドするソリューションが定義されています。

このサンプルの設定と実行

  1. Windows Server AppFabric のセットアップ時に永続化ストアを作成しなかった場合は、作成します。

    1. C:\Windows\System32\AppFabric\Microsoft.ApplicationServer. Configuration.exe を管理者として実行します。[ワーカーの構成] ステップで、[永続化構成を設定する] チェック ボックスをオンにします。永続化プロバイダーとして [sqlStoreProvider] を選択し、[構成] をクリックします。

    2. [永続化 SQL ストア構成] ウィンドウで、[永続化ストア登録をルート Web.config に追加する] および [永続化ストアを初期化する] チェック ボックスをオンにします。インスタンス ストアの名前を「ApplicationServerWorkflowInstanceStore」に指定します。[OK] をクリックして、指定した名前の永続化ストア データベースを作成します。別のデータベース名を使用する場合は、サンプル コードを変更する必要があります (以下を参照)。

  2. このサンプルを 64 ビット システムで実行する場合は、C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.StoreManagement.dll ファイルをプロジェクト フォルダーにコピーします。

    ヒント

    このパスは手順 3. で使用します。

  3. ソリューションをビルドします。

    1. Visual Studio 2010 を管理者として起動します。[スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft Visual Studio 2010] の順にポイントします。[Microsoft Visual Studio 2010] を右クリックし、[管理者として実行] をクリックします。

    2. サンプル プロジェクトを開きます。Visual Studio で [ファイル] をクリックし、[開く] をポイントして、[プロジェクト/ソリューション] をクリックします。サンプル ソリューション ファイル <サンプル>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln を選択します。ファイルを開くとき、サンプル サービスに使用するローカル IIS の URL がまだ作成されていないことを示す Visual Studio の警告が表示されます。新しい仮想ディレクトリを作成することを確認します。

    3. このサンプルを 64 ビット システムで実行する場合は、InstanceQuery および InstanceControl プロジェクトに対して次の手順を実行します。Program.cs ファイルの行 17 で、Microsoft.ApplicationServer.StoreManagement.dll ファイルのパスを、手順 2. でファイルをコピーした場所に変更します。

    4. このサンプルでは、SQL Express でホストされる永続化データベース ApplicationServerWorkflowInstanceStore でワークフローが保持されることを想定しています。データベースの名前と SQL サーバー インスタンスは、InstanceControl プロジェクトの Program.cs の行 44 と 45、および InstanceQuery プロジェクトの Program.cs の行 37 と 38 で変更できます。

    5. F6 キーを押してソリューションをビルドします。これにより TestWorkflow アプリケーションが IIS に自動的に展開されます。

  4. TestWorkflow アプリケーションを構成します。

    1. IIS マネージャーを起動します。[スタート] ボタンをクリックし、[コントロール パネル]、[管理ツール] の順にポイントして、[インフォメーション サービス (IIS) マネージャー] をクリックします。

    2. 適切なアプリケーション プールを設定し、サイトに対して net.pipe プロトコルを有効にします。

      • IIS 接続ウィンドウで、<コンピューター名>/Sites/Default Web Site ノードを選択します。

      • IIS 操作ウィンドウで、[詳細設定] をクリックします。

      • [アプリケーション プール] の設定を [ASP.NET v4.0] に変更します。

      • [有効なプロトコル] を [http,net.pipe] に変更します。注意: コンマと net.pipe の間にスペースを入れないでください。

      • [OK] をクリックします。

    3. 適切なアプリケーション プールを設定し、アプリケーションに対して net.pipe プロトコルを有効にします。

      • IIS 接続ウィンドウで、<コンピューター名>/Sites/Default Web Site/TestWorkflow ノードを選択します。

      • IIS 操作ウィンドウで、[詳細設定] をクリックします。

      • [アプリケーション プール] の設定を [ASP.NET v4.0] に変更します。

      • [有効なプロトコル] を [http,net.pipe] に変更します。注意: コンマと net.pipe の間にスペースを入れないでください。

      • [OK] をクリックします。

  5. TestService のインスタンスを作成します。

    1. WCF テスト クライアントを開きます。

      • IIS マネージャー接続ウィンドウで、<コンピューター名>/Sites/Default Web Site/TestWorkflow ノードを選択します。

      • [TestWorkflow] を右クリックし、[コンテンツ ビューに切り替え] をクリックします。

      • [TestService.xamlx] を右クリックし、[参照] をクリックします。Web ブラウザーが起動し、TestService の [ようこそ] ページが表示されます。

      • 次のように WCF テスト クライアントを開きます。WCF テスト クライアントを開きます。[スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft Visual Studio 2010]、[Visual Studio Tools] の順にポイントし、[Visual Studio コマンド プロンプト (2010)] をクリックします。コマンド プロンプトで、コマンド「wcftestclient」を入力します。

      • Web ブラウザーの URL ウィンドウで、TestService の URL (例: "https://localhost/TestWorkflow/TestService.xamlx") をコピーします。WCF テスト クライアントで、[サービス プロジェクト] を右クリックし、[サービスの追加] をクリックします。エンドポイントのアドレスを入力するように求められたら、TestService の URL を貼り付けます。

    2. 次のように TestService を起動します。

      • WCF テスト クライアント ウィンドウで、[IService (BasicHttpBinding_IService)] ノードの下にある [Invoke()] ノードをダブルクリックします。

      • [Invoke] タブで、[] 列の (null) フィールドをクリックします。選択を [(null)] から [System.Nullable<System.Int32>] に変更します。次に、[名前] 列の [int] ノードを展開します。0 の値を持つ新しい行が表示されます。

      • [呼び出す] をクリックします。10 分間実行される TestService のインスタンスが作成されます。

      • 値を 1 に変更し、[呼び出す] をクリックします。すぐに完了する TestService のインスタンスが作成されます。

      • 値を 2 に変更し、[呼び出す] をクリックします。例外をスローして中断する TestService のインスタンスが作成されます。

  6. インスタンスを問い合わせます。

    1. Visual Studio で、InstanceQuery が既定のスタートアップ プロジェクトになっていることを確認し、F5 キーを押してインスタンスを問い合わせます。コンソール ウィンドウが開き、手順 5.b で作成した 3 つのインスタンスが表示されます。

    2. または、コマンド プロンプトで InstanceQuery コマンドを次のように実行します。

      • コマンド プロンプトを開きます。<サンプル>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group] コマンドを実行します。
  7. インスタンスを制御します。

    1. コマンド プロンプトで、<サンプル>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete] コマンドを実行します。前に作成したいずれかのインスタンスの 20 文字のインスタンス ID (GUID) を使用します。

このサンプルの削除

  1. 永続化ストアから TestWorkflow サービスのすべてのサービス インスタンスを削除します。管理コンソール ウィンドウを開き、次のコマンドを実行します。

    > powershell
    > import-module applicationServer
    > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
    

デモ

このサンプルには 3 つのプロジェクトが含まれています。

  • TestWorkflow は WF サービスを実装します。サービスは IIS でホストされます。サービスが呼び出されるたびに、サービスの新しいインスタンスが作成されます。WCF テスト クライアントからサービスを呼び出す際、ユーザーはサービスにパラメーターを渡します。そのパラメーターに応じて、インスタンスは 10 分間実行されるか、すぐに完了するか、または例外をスローします。

  • InstanceQuery は、永続化ストアに対してクエリを発行し、結果を画面に出力するコンソール アプリケーションを実装します。ユーザーはクエリの種類、クエリのパラメーター、および永続化ストアの接続文字列を指定する必要があります。

  • InstanceControl は、永続化ストア内に存在するインスタンスに対してコントロール コマンドを発行するコンソール アプリケーションを実装します。ユーザーはコマンドの種類、インスタンス ID、および永続化ストアの接続文字列を指定する必要があります。

インスタンス クエリのサンプル アプリケーション

インスタンス クエリのサンプル アプリケーションは、AppFabric クエリ プロバイダーの API の機能を示します。このクエリ プロバイダーを使用すると次の 3 種類のクエリを発行できます。

  • 永続化ストアに存在するインスタンスのうち、クエリに一致するプロパティを持つインスタンスの一覧を取得します。このクエリは、instanceInfo の配列を返します。

  • 永続化ストアに存在するインスタンスのうち、クエリに一致するプロパティを持つインスタンスの数を取得します。このクエリは Int32 の値を返します。

  • 永続化ストアに存在するインスタンスのうち、クエリに一致するプロパティを持つインスタンスの数を取得し、定義済みのカテゴリに従ってグループ化します。このクエリは、groupingResult 型の列挙可能な値を返します。

クエリの種類ごとに、クエリを実行する非同期 API がクエリ プロバイダーによって提供されます。入力と戻り値の型はクエリの種類によって異なります。すべてのクエリの種類に関して、ユーザーは一連のクエリ フィルターを指定できます。サンプルではすべてのフィルターを null に設定しているため、ストア内のすべてのインスタンスがクエリで選択されます。ユーザーはクエリ フィルター パラメーターに加えて、永続化ストアの接続文字列を指定する必要があります。サンプルでは、インスタンスが DefaultSqlWorkflowInstanceStore 内に存在すると想定しています。また、データベースは Windows 統合セキュリティを使用してデータベース アクセスを認証すると想定しています。

インスタンスの一覧を要求する場合、ユーザーは返されるインスタンスの最大数とインスタンスの並べ替え方法を指定する必要があります。現在、クエリ プロバイダーは LastUpdatedTime による並べ替えのみに対応しています。または、並べ替えされていない一覧を返します。

グループ化されたインスタンスの数を要求する場合、ユーザーはグループ化パラメーターを指定する必要があります。これらのパラメーターは List<GroupingMode> として指定します。最初の要素でメイン グループを定義し、その後に続く各要素でサブグループを定義します。

インスタンス制御のサンプル アプリケーション

インスタンス制御のサンプル アプリケーションは、AppFabric コントロール プロバイダーの API の機能を示します。コントロール プロバイダーによって、ユーザーはインスタンスに対して suspend、resume、cancel、terminate、または delete コマンドを発行できます。コマンドの種類とインスタンス ID に加えて、ユーザーは SiteName、RelativeApplicationPath、および VirtualPath のサービス識別子も指定する必要があります。これらのパラメーターは、WMS でサービス インスタンスのコントロール エンドポイントを計算するために必要です (サービス識別子は、Suspend、Resume、Cancel、および Terminate の場合にのみ必要です。Delete コマンドはコントロール エンドポイントに対して発行されるのではなく、データベース内で直接実行されます)。

ユーザーはクエリ フィルター パラメーターに加えて、永続化ストアの接続文字列を指定する必要があります。サンプルでは、インスタンスが DefaultSqlWorkflowInstanceStore 内に存在すると想定しています。また、データベースは Windows 統合セキュリティを使用してデータベース アクセスを認証すると想定しています。

インスタンス制御のサンプル アプリケーションでは、Suspend、Resume、Cancel、または Terminate コマンドを永続化ストアのコマンド キューに入れていることに注目してください。コマンドは後から実行されます。インスタンス クエリのサンプル アプリケーションを使用して、コマンドが実行されたかどうか、実行された場合はいつ実行されたかを確認してください。

インスタンスに対するコマンドは、キュー内にそのインスタンスに対する他の保留中コマンドがない場合にのみ、キューに入れることができます。

次の表で、さまざまな状態のインスタンスに対してコマンドを発行した場合のコマンドの作用について説明します。

現在の状態 Suspend Resume Cancel Terminate Delete

実行中

インスタンスを中断

何もしない

インスタンスをキャンセルする

インスタンスを終了する

永続化ストアからインスタンスを削除する

中断

何もしない

インスタンスを再開する

インスタンスをキャンセルする

インスタンスを終了する

永続化ストアからインスタンスを削除する

完了

使用不可

使用不可

使用不可

使用不可

永続化ストアからインスタンスを削除する

警告

実行中のインスタンスを永続化ストアから削除すると、予期しないビヘイビアーにつながる可能性があります。実行中の削除は推奨されません。

  2011-12-05