第 5 課:使用 Windows PowerShell 來追蹤工作流程
完成時間: 25 分鐘
目標: 了解如何使用 Windows PowerShell 來設定追蹤設定檔,以監控在工作流程中定義的變數。
用途: 此課程的目的是顯示如何使用 Microsoft AppFabric 1.1 for Windows Server Cmdlet,為「訂單服務」設定自訂追蹤設定檔。接下來您會使用指令碼函式,從監控儲存區報告自訂追蹤資訊。
必要條件
開始此課程之前,請先檢查下列需求:
您必須根據第 2 課:使用 Windows PowerShell 來部署 Order Service 應用程式中的說明部署「訂單服務」應用程式。
您必須具備一些 SQL Server 知識,才能了解此課程的所有小節。
程序
您將會執行此課程中的下列步驟:
使用 Windows PowerShell 建立新的自訂追蹤設定檔,以表示所做的組態。
利用 Windows PowerShell 報告目前的追蹤組態。
使用 Windows PowerShell 設定 OrderWorkflowService,來使用新的自訂追蹤設定檔。
使用 Windows PowerShell 從監控儲存區報告自訂追蹤資訊。
建立新的自訂追蹤設定檔
在本節中,您將會建立新的自訂追蹤設定檔,實際上是在 Order Service 教學課程的第 5 課:使用 Windows PowerShell 來追蹤工作流程中使用之設定檔的複本。這個新追蹤設定檔的名稱使用 "_PS" 尾碼,因此您可以使用 AppFabric Cmdlet 將設定檔與組態關聯。
在 Windows PowerShell 中,輸入下列命令。
Notepad OrderService_PS.tp
當 [記事本] 提示您建立新檔案時,請按一下 [是]。
將下列 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 之「等候訂單」活動中的 product 與 quantity 工作流程變數。
關閉 [記事本],當它提示您將變更儲存到 OrderService_PS.tp 時,請按一下 [儲存]。
從 Windows PowerShell 報告追蹤組態
在本節中,您將會使用 Windows PowerShell 的 AppFabric Cmdlet 來檢視 OrderWorkflowService 目前的追蹤組態。
在 Windows PowerShell 中執行下列命令,以查看目前是否已針對 OrderWorkflowService 啟用追蹤功能。
Get-ASAppServiceTracking -SiteName OrderService_PS -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" | fl *
您的結果看起來應該像下面這樣:
IsTrackingEnabled : True ProfileName : HealthMonitoring Tracking Profile IsLocal : True BehaviorName :
在 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 以使用新的自訂追蹤設定檔。
執行下列命令,將 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
在 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
若要設定 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 :
在 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,以報告自訂追蹤資訊。
在 Windows PowerShell 中,輸入下列命令。
Notepad .\Utility.ps1
複製下列指令碼並貼在 [記事本] 中的 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 以供追蹤之用。
關閉 [記事本],並按一下 [儲存] 將變更儲存到 Utility.ps1。
在 Windows PowerShell 中輸入下列命令,將新的變更匯入 Utility.ps1 以用於目前的 Windows PowerShell 工作階段。
Import-Module .\Utility.ps1
產生和報告新的追蹤資料
執行 OrderClient.exe。此檔案應已部署於 C:\DublinTutorial\OrderClient 目錄,如 Order Service 教學課程的第 1 課:開始使用 Windows PowerShell 的 AppFabric Cmdlet所述。
在 [Quantity] (數量) 中輸入 88。
按一下 [Contoso.com Order Form] 上的 [Submit]。請先確認表單狀態區段顯示「Your order has been received」再繼續。當表單顯示此訊息之後,會執行訂單工作流程的新執行個體以模擬訂單處理程序。
等候約 30 秒的時間以供記錄追蹤資訊。
在 Windows PowerShell 視窗中,輸入下列命令以報告追蹤事件。
GetTrackedWFVariableEvents "Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.OrderWorkflow" quantity OrderService_PS
您的結果應該像下面的報告。注意為工作流程執行個體追蹤的 TrackedVariableName 與 TrackedVariableValue。
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 的 AppFabric Cmdlet
第 2 課:使用 Windows PowerShell 來部署 Order Service 應用程式
第 3 課:使用 Windows PowerShell 來設定 Order Service
第 4 課:使用 Windows PowerShell 來監控 Order Service
第 5 課:使用 Windows PowerShell 來追蹤工作流程
2012-03-05