第 5 課:使用 Windows PowerShell 來追蹤工作流程

完成時間: 25 分鐘

目標: 了解如何使用 Windows PowerShell 來設定追蹤設定檔,以監控在工作流程中定義的變數。

用途: 此課程的目的是顯示如何使用 Windows Server AppFabric Cmdlet,為 Order Service 設定自訂追蹤設定檔。接下來您會使用指令碼函式,從監控儲存區報告自訂追蹤資訊。

必要條件

開始此課程之前,請先檢查下列需求:

程序

您將會執行此課程中的下列步驟:

  1. 使用 Windows PowerShell 建立新的自訂追蹤設定檔,以表示所做的組態。

  2. 利用 Windows PowerShell 報告目前的追蹤組態。

  3. 使用 Windows PowerShell 設定 OrderWorkflowService,來使用新的自訂追蹤設定檔。

  4. 使用 Windows PowerShell 從監控儲存區報告自訂追蹤資訊。

建立新的自訂追蹤設定檔

在本節中,您將會建立新的自訂追蹤設定檔,實際上是在 Windows Server AppFabric 介面使用教學課程第 5 課:使用 AppFabric 來繼續已暫停的工作流程中使用之設定檔的複本。這個新追蹤設定檔的名稱使用 "_PS" 尾碼,因此您可以使用 AppFabric Cmdlet 將設定檔與組態關聯。

  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 之「等候訂單」活動中的 productquantity 工作流程變數。

  3. 關閉 [記事本],當它提示您將變更儲存到 OrderService_PS.tp 時,請按一下 [儲存]。

從 Windows PowerShell 報告追蹤組態

在本節中,您將會使用 Windows PowerShell 的 AppFabric Cmdlet 來檢視 OrderWorkflowService 目前的追蹤組態。

  1. 在 Windows PowerShell 中執行下列命令,以查看目前是否已針對 OrderWorkflowService 啟用追蹤功能。

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

    您的結果看起來應該像下面這樣:

    IsTrackingEnabled : True
    ProfileName       : HealthMonitoring Tracking Profile
    IsLocal           : True
    BehaviorName      :
    
  2. 在 Windows PowerShell 中執行下列命令,以查看 OrderWorkflowService 可用的追蹤設定檔。

    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 Cmdlet,來設定 OrderWorkflowService 以使用新的自訂追蹤設定檔。

  1. 執行下列命令,將 OrderService_PS.tp 新增至 OrderWorkflowService 可用的追蹤設定檔清單。

    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. 在 Windows PowerShell 中執行下列命令,以查看 OrderWorkflowService 可用的新追蹤設定檔清單。

    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. 若要設定 OrderWorkflowService 以使用名為 “CustomOrderServiceProfile - Windows PowerShell Config” 的新設定檔,請在 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. 在 Windows PowerShell 中執行下列命令,以查看 OrderWorkflowService 的新追蹤組態。

    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 JOIN 搭配 WfEventProperties 檢視,來報告追蹤的變數名稱與其值。它也會依工作流程名稱與追蹤的變數名稱 (而非 InstanceId) 來篩選 SQL 查詢。這樣可讓您根據下訂單時設定的 [Quantity] (數量) 值,來識別工作流程執行個體。實務上,應該要公開訂單 ID 以供追蹤之用。

  3. 關閉 [記事本],並按一下 [儲存] 將變更儲存到 Utility.ps1。

  4. 在 Windows PowerShell 中輸入下列命令,將新的變更匯入 Utility.ps1 以用於目前的 Windows PowerShell 工作階段。

    Import-Module .\Utility.ps1
    

產生和報告新的追蹤資料

  1. 執行 OrderClient.exe。此檔案應已部署於 C:\DublinTutorial\OrderClient 目錄,如 Windows Server AppFabric 介面使用教學課程第 1 課:開始使用所述。

  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 Cmdlet 設定 OrderWorkflowService 以使用新的設定檔。然後您透過建立工作流程的新執行個體來產生追蹤資訊,並使用自訂的 Windows PowerShell 指令碼函式來報告追蹤的資料。

另請參閱

概念

第 1 課:開始使用 Windows PowerShell 的 Windows Server AppFabric Cmdlet
第 2 課:使用 Windows PowerShell 來部署訂單服務應用程式
第 3 課:使用 Windows PowerShell 來設定 Order Service
第 4 課:使用 Windows PowerShell 來監控 Order Service

  2011-12-05