レッスン 5: Windows PowerShell によるワークフローの追跡

所要時間: 25 分

目標: 追跡プロファイルを構成して Windows PowerShell でワークフローに定義された変数を監視する方法を学習します。

目的: このレッスンの目的は、Microsoft AppFabric 1.1 for Windows Server コマンドレットを使用して Order Service のカスタム追跡プロファイルを構成する方法を示すことです。その後、スクリプト関数を使用して監視ストアからカスタム追跡情報を報告します。

前提条件

このレッスンを開始する前に、次の要件に注意してください。

手順

このレッスンでは、次の手順を実行します。

  1. Windows PowerShell で作成した構成を表す新しいカスタム追跡プロファイルを作成します。

  2. Windows PowerShell で現在の追跡構成を報告します。

  3. 新しいカスタム追跡プロファイルを使用するように Windows PowerShell で OrderWorkflowService を構成します。

  4. Windows PowerShell で監視ストアからカスタム追跡情報を報告します。

新しいカスタム追跡プロファイルの作成

ここでは、新しいカスタム追跡プロファイルを作成します。これは実際には「Order Service チュートリアル」の「レッスン 5: Windows PowerShell によるワークフローの追跡」で使用されるプロファイルのコピーです。この新しい追跡プロファイルの名前に "_PS" というサフィックスを付けて、このプロファイルが AppFabric コマンドレットによる構成に関連していることがわかるようにします。

  1. Windows PowerShell で次のコマンドを入力します。

    Notepad OrderService_PS.tp
    

    メモ帳で新しいファイルの作成を求めるメッセージが表示されたら [はい] をクリックします。

  2. 次の XML 要素をコピーしてメモ帳に貼り付けます。

    <trackingProfile name="CustomOrderServiceProfile - Windows PowerShell Config">
       <workflow activityDefinitionId="*">
          <workflowInstanceQueries>
             <workflowInstanceQuery>
                <states>
                   <state name="*" />
                </states>
             </workflowInstanceQuery>
          </workflowInstanceQueries>
    
          <activityStateQueries>
             <activityStateQuery activityName="Wait for order">
                <states>
                   <state name="Closed" />
                </states>
                <variables>
                   <variable name="product"/>
                   <variable name="quantity"/>
                </variables>
             </activityStateQuery>
          </activityStateQueries>
    
          <faultPropagationQueries>
             <faultPropagationQuery faultSourceActivityName="*" faultHandlerActivityName="*" />
          </faultPropagationQueries>
    
          <bookmarkResumptionQueries>
             <bookmarkResumptionQuery name="*" />
          </bookmarkResumptionQueries>
    
          <customTrackingQueries>
             <customTrackingQuery name="*" activityName="*" />
          </customTrackingQueries>
       </workflow>
    </trackingProfile>
    

    この追跡プロファイルによって、OrderWorkflow.xamlx 内の Wait for order アクティビティの product ワークフロー変数と quantity ワークフロー変数の追跡が可能になります。

  3. メモ帳を閉じ、OrderService_PS.tp に対する変更の保存を求めるメッセージが表示されたら [保存] をクリックします。

Windows PowerShell による追跡構成の報告

ここでは、Windows PowerShell の AppFabric コマンドレットを使用して、OrderWorkflowService の現在の追跡構成を表示します。

  1. 現在 OrderWorkflowService に対して追跡が有効になっているかどうかを確認するには、Windows PowerShell で次のコマンドを実行します。

    Get-ASAppServiceTracking -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" | fl *
    

    結果は次のようになります。

    IsTrackingEnabled : True
    ProfileName       : HealthMonitoring Tracking Profile
    IsLocal           : True
    BehaviorName      :
    
  2. OrderWorkflowService で利用できる追跡プロファイルを確認するには、Windows PowerShell で次のコマンドを実行します。

    Get-ASAppServiceTrackingProfile -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" | fl Name
    

    結果は次のようになり、OrderWorkflowService で現在利用できる追跡プロファイルが表示されます。

    Name :
    
    Name : ErrorsOnly Tracking Profile
    
    Name : HealthMonitoring Tracking Profile
    
    Name : EndToEndMonitoring Tracking Profile
    
    Name : Troubleshooting Tracking Profile
    

Windows PowerShell によるカスタム追跡の構成

ここでは、Windows PowerShell の AppFabric コマンドレットを使用して、OrderWorkflowService で新しいカスタム追跡プロファイルを使用するように構成します。

  1. OrderWorkflowService で利用できる追跡プロファイルの一覧に OrderService_PS.tp を追加するには、次のコマンドを実行します。

    Import-ASAppServiceTrackingProfile -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" -FilePath $(Get-Item ".\OrderService_PS.tp").FullName | fl *
    

    このコマンドを正常に実行するためには、OrderService_PS.tp は現在の Windows PowerShell ディレクトリに存在する必要があります。

    追跡プロファイルを追加した結果は、次のようになります。

    Name        : CustomOrderServiceProfile - Windows PowerShell Config
    SiteName    : OrderService_PS
    VirtualPath : /OrderWorkflowService/OrderWorkflow.xamlx
    IsLocal     : True
    
  2. OrderWorkflowService で利用できる追跡プロファイルの新しい一覧を表示するには、Windows PowerShell で次のコマンドを実行します。

    Get-ASAppServiceTrackingProfile -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" | fl Name
    

    結果は次のようになり、"CustomOrderServiceProfile - Windows PowerShell Config" という名前のプロファイルが含まれています。

    Name :
    
    Name : ErrorsOnly Tracking Profile
    
    Name : HealthMonitoring Tracking Profile
    
    Name : EndToEndMonitoring Tracking Profile
    
    Name : Troubleshooting Tracking Profile
    
    Name : CustomOrderServiceProfile - Windows PowerShell Config
    
  3. "CustomOrderServiceProfile - Windows PowerShell Config" という名前の新しいプロファイルを使用するように OrderWorkflowService を構成するには、Windows PowerShell で次のコマンドを実行します。

    Set-ASAppServiceTracking -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" -ProfileName "CustomOrderServiceProfile - Windows PowerShell Config" | fl *
    

    結果は次のようになります。

    IsTrackingEnabled : True
    ProfileName       : CustomOrderServiceProfile - Windows PowerShell Config
    IsLocal           : True
    BehaviorName      :
    
  4. OrderWorkflowService の新しい追跡構成を確認するには、Windows PowerShell で次のコマンドを実行します。

    Get-ASAppServiceTracking -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" | fl *
    

    追跡構成は次のように表示されます。

    IsTrackingEnabled : True
    ProfileName       : CustomOrderServiceProfile - Windows PowerShell Config
    IsLocal           : True
    BehaviorName      :
    

Windows PowerShell による現在の追跡データの報告

ここでは、スクリプト関数を使用して、前のセクションで構成した追跡対象ワークフロー変数のワークフロー イベントを報告します。新しい追跡情報を報告するには、新しいワークフロー インスタンスを実行し、新しい追跡構成を適用して追跡データを生成する必要があります。

追跡情報を報告する新しいスクリプト関数を追加する

カスタム追跡情報を報告する新しいスクリプト関数を Utility.ps1 に追加するには、次の手順を実行します。

  1. Windows PowerShell で次のコマンドを入力します。

    Notepad .\Utility.ps1
    
  2. 次のスクリプト コードをコピーしてメモ帳で Utility.ps1 の最後の部分に貼り付けます。

    #============================================================================================#
    #===                                                                                      ===#
    #=== Retrieves Tracked WF Variable Events for the given workflow and variable from the    ===#
    #=== specified monitoring store.                                                       ===#
    #===                                                                                      ===#
    #============================================================================================#
    
    
    Function GetTrackedWFVariableEvents($FullWorkflowName,$trackedVariable,$database)
    {
    
      $SQL = "SELECT  EventSources.Name AS WorkflowName, " +
                      "EventSources.Computer, " +
                      "EventSources.Site, " +
                      "EventSources.VirtualPath, " + 
                      "WfEvents.Id AS EventID, " + 
                      "WfEvents.WorkflowInstanceId, " +
                      "WfEvents.TimeCreated, " + 
                      "WfEvents.Name AS EventName, " + 
                      "WfEvents.State, " + 
                      "WfEvents.ActivityName, " + 
                      "WfEvents.Exception, " +
                      "WfEventProperties.Name AS TrackedVariableName, " + 
                      "WfEventProperties.Value AS TrackedVariableValue " +
    
              "FROM    EventSources INNER JOIN " +
                      "WfEvents ON EventSources.Id = WfEvents.EventSourceId INNER JOIN " +
                      "WfEventProperties ON WfEvents.Id = WfEventProperties.EventId " +
              "WHERE   EventSources.Name = `'$FullWorkflowName`' AND WfEventProperties.Name = `'$trackedVariable`'"
    
    
      Invoke-Sqlcmd -Query $SQL -Database $database
    }
    

    この新しい GetTrackedWFVariableEvents 関数は、GetWFEvents 関数を少し変更しただけのものです。この関数では追跡対象の変数名とその値を報告するために、INNER JOINWfEventProperties ビューが追加されます。また、SQL クエリのフィルターには、InstanceId ではなくワークフロー名と追跡対象変数名が使用されます。これにより、発注時に設定した [Quantity] の値でワークフロー インスタンスを識別できます。現実的には、追跡用の注文 ID を公開することをお勧めします。

  3. メモ帳を閉じ、[保存] をクリックして Utility.ps1 への変更を保存します。

  4. Windows PowerShell で次のコマンドを入力して、現在の Windows PowerShell セッションで Utility.ps1 に新しい変更をインポートします。

    Import-Module .\Utility.ps1
    

新しい追跡データを生成して報告する

  1. OrderClient.exe を実行します。このファイルは「Order Service チュートリアル」の「レッスン 1: Windows PowerShell 用の AppFabric コマンドレットの概要」で作成され、C:\DublinTutorial\OrderClient ディレクトリに展開済みです。

  2. [Quantity] の値に「88」と入力します。

  3. [Contoso.com Order Form] の [Submit] をクリックします。作業を続行する前に、フォームの下部にあるステータス セクションに [Your order has been received] と表示されていることを確認します。これがフォームに表示された後、注文ワークフローの新しいインスタンスが実行され、注文処理のシミュレーションが行われます。

  4. 追跡情報の記録が行われるまで 30 秒ほど待機します。

  5. Windows PowerShell ウィンドウで、次のコマンドを入力して追跡イベントを表示します。

    GetTrackedWFVariableEvents "Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.OrderWorkflow" quantity OrderService_PS
    

    結果は次のような報告になります。ワークフロー インスタンスで TrackedVariableNameTrackedVariableValue が追跡されたことがわかります。

    WorkflowName         : Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.OrderWorkflow
    Computer             : server1
    Site                 : OrderService_PS
    VirtualPath          : /OrderWorkflowService/OrderWorkflow.xamlx
    EventID              : 1439
    WorkflowInstanceId   : ac0fd7fb-d463-4683-9c75-80d90a8b75ed
    TimeCreated          : 2009-11-02 10:09:21.3108822
    EventName            : Wait for order
    State                : Closed
    ActivityName         :
    Exception            :
    TrackedVariableName  : quantity
    TrackedVariableValue : 88
    

まとめ

このレッスンでは、新しい追跡プロファイルを作成し、Windows PowerShell の AppFabric コマンドレットを使用して OrderWorkflowService で新しいプロファイルが使用されるように構成しました。その後、ワークフローの新しいインスタンスを作成して追跡情報を生成し、Windows PowerShell のカスタム スクリプト関数を使用して追跡データを表示しました。

関連項目

概念

レッスン 1: Windows PowerShell 用の AppFabric コマンドレットの概要
レッスン 2:Windows PowerShell による Order Service アプリケーションの展開
レッスン 3: Windows PowerShell による Order Service の構成
レッスン 4: Windows PowerShell による Order Service の監視
レッスン 5: Windows PowerShell によるワークフローの追跡

  2012-03-05