第 4 课:使用 Windows PowerShell 监控订购服务

**完成所需时间:**25 分钟

目标: 了解如何使用 Windows PowerShell 的 Windows Server AppFabric cmdlet 来监控实时和历史监控数据。

目的: 本课程的目的是帮助您熟悉通过使用 Windows PowerShell 的 AppFabric cmdlet 报告的实例信息,以及如何使用这些信息来控制实例。

先决条件

在开始本课程之前,请注意以下先决条件:

过程

在本课程中您将完成以下练习:

  1. 使用 Windows PowerShell 报告监控信息。

  2. 使用 Windows PowerShell 控制工作流实例。

  3. 使用 Windows PowerShell 查看来自 AppFabric 监控数据库的已跟踪工作流事件。

使用 Windows PowerShell 报告监控信息

报告使用订购服务应用程序部署的 OrderWorkflowService 的 WF 实例

  1. 从 C:\DublinTutorial\OrderServiceSolution\Completed\OrderClient\bin\Debug 目录运行 OrderClient.exe。此文件是在第 2 课:使用 Windows PowerShell 部署订单服务应用程序中建立的。您可以将以下命令复制到 Windows PowerShell 以运行 OrderClient。

    C:\DublinTutorial\OrderServiceSolution\Completed\OrderClient\bin\Debug\OrderClient.exe
    
  2. 在“Contoso.com 订单表单”上单击“提交”。继续操作之前,请验证该窗体底部的状态部分是否显示“已收到您的订单”。在窗体显示此信息后,将会运行一个模拟订单处理的 OrderWorkflowService 实例。

  3. 记录下此时间,以便能够交叉引用工作流实例的创建时间。

  4. 要通过使用 AppFabric cmdlet 报告 OrderWorkflowService 的工作流实例,请在 Windows PowerShell 中执行以下命令。

    Get-ASAppServiceInstance -SiteName "OrderService_PS" -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" | fl InstanceId, Status, Condition, CreationTime, LastUpdateTime, SiteName, VirtualPath, ExceptionMessage
    

    此命令将获取 OrderService_PS 数据库中 OrderWorkflowService 的所有实例。这些实例通过使用 Format-List cmdlet 的 fl 别名传输到该 cmdlet 中,以仅报告所需的工作流属性。

  5. 验证命令是否生成一个与以下列表相似的工作流实例列表。

    InstanceId       : 95a25419-0d71-42c4-ab70-aa523ba603fc
    Status           : Running
    Condition        : Active
    CreationTime     : 11/1/2009 2:04:48 AM
    LastUpdateTime   : 11/1/2009 2:04:56 AM
    SiteName         : OrderService_PS
    VirtualPath      : /OrderWorkflowService/OrderWorkflow.xamlx
    ExceptionMessage :
    

    您可以使用此信息监控实例的状态和异常信息。

  6. 找到一个带有步骤 3 中记录的创建时间的实例。

使用 Windows PowerShell 控制工作流实例

在此部分,您将挂起、恢复和停止一个工作流实例。

  1. 再次运行 OrderClient.exe 以确保您有一个处于运行状态的实例。Windows PowerShell 中的以下命令运行 OrderClient。

    C:\DublinTutorial\OrderServiceSolution\Completed\OrderClient\bin\Debug\OrderClient.exe
    
  2. 在“Contoso.com 订单表单”上单击“提交”。继续操作之前,请验证该窗体底部的状态部分是否显示“已收到您的订单”。在窗体显示此信息后,将会运行一个模拟订单处理的 OrderWorkflowService 实例。

  3. 记录下此时间,以便能够交叉引用工作流实例的创建时间。

  4. 通过在 Windows PowerShell 中执行以下命令,使用 AppFabric cmdlet 报告 OrderWorkflowService 的工作流实例。

    Get-ASAppServiceInstance -SiteName "OrderService_PS" -VirtualPath "/OrderWorkflowService/OrderWorkflow.xamlx" –Status Running | fl InstanceId, Status, Condition, CreationTime, LastUpdateTime, SiteName, VirtualPath, ExceptionMessage
    
  5. 验证命令是否生成一个与以下列表相似的工作流实例列表。

    InstanceId       : 95a25419-0d71-42c4-ab70-aa523ba603fc
    Status           : Running
    Condition        : Active
    CreationTime     : 11/1/2009 2:04:48 AM
    LastUpdateTime   : 11/1/2009 2:04:56 AM
    SiteName         : OrderService_PS
    VirtualPath      : /OrderWorkflowService/OrderWorkflow.xamlx
    ExceptionMessage :
    
  6. 找到一个步骤 3 中记录的 CreationTime 的实例。通过按住鼠标左键并在 GUID 上拖动鼠标来突出显示为 InstanceId 显示的 GUID 值。

  7. 在突出显示整个 GUID 后,在突出显示的 GUID 中右键单击,将 GUID 复制到剪贴板。

  8. 若要挂起剪贴板上的 InstanceId 标识的正在运行的工作流实例,请执行以下命令,用您的 InstanceID 代替下面显示的 GUID。

    Get-ASAppServiceInstance -InstanceId 95a25419-0d71-42c4-ab70-aa523ba603fc | Suspend-ASAppServiceInstance
    

    此命令获取 InstanceId 标识的工作流实例,并将其传输到 Suspend-ASAppServiceInstance cmdlet 中以挂起工作流。

  9. 若要恢复工作流,请执行以下命令,用您的 InstanceID 替代下面显示的 GUID。

    Get-ASAppServiceInstance -InstanceId 95a25419-0d71-42c4-ab70-aa523ba603fc | Resume-ASAppServiceInstance
    

    此命令获取 InstanceId 标识的工作流实例,并将其传输到 Resume-ASAppServiceInstance cmdlet 中以恢复挂起的工作流。

  10. 若要停止和终止该实例,请执行以下命令,用您的 InstanceID 替代下面显示的 GUID。

    Get-ASAppServiceInstance -InstanceId 95a25419-0d71-42c4-ab70-aa523ba603fc | Stop-ASAppServiceInstance -Terminate
    

    此命令获取 InstanceId 标识的工作流实例,并将其传输到 Stop-ASAppServiceInstance cmdlet 中以停止和终止工作流。

使用 Windows PowerShell 查看跟踪的 WF 事件

基于监控级别和为工作流配置的跟踪配置文件,您可以在工作流中跟踪许多数据点。您可以通过使用第 3 课:为订单服务配置 Windows PowerShell 中的 Set-ASAppMonitoring cmdlet 将监控级别设置为 HealthMonitoring。在本节中,您将生成一个实例的 WF 事件跟踪报告。若要报告此信息,您将再次使用一个将添加到 Utility.ps1 脚本模块的脚本函数。

  1. 在 Windows PowerShell 中,输入以下命令以打开 Utility.ps1 脚本文件。

    Notepad .\Utility.ps1
    
  2. 在记事本中将以下脚本函数复制并粘贴到 Utility.ps1 脚本的底部。

    #============================================================================================#
    #===                                                                                      ===#
    #===                   Make sure the modules and snapins are loaded                       ===#
    #===                                                                                      ===#
    #============================================================================================#
    
    function RegisterSnapIn($snapin)
    {
    $reg = Get-PSSnapin -Registered -Name $snapin
    $added = Get-PSSnapin -Name $snapin -ErrorAction SilentlyContinue
    if ($reg.Name -eq $snapin)
    {
    if ($added.Name -ne $snapin)
    {
    Add-PSSnapin $snapin
    }
    }
    }
    
    
    RegisterSnapIn "SqlServerProviderSnapin100"
    RegisterSnapIn "SqlServerCmdletSnapin100"
    Import-Module ApplicationServer
    
    
    
    #============================================================================================#
    #===                                                                                      ===#
    #=== Retrieves WF Events for the given InstanceId from the specified monitoring database. ===#
    #===                                                                                      ===#
    #============================================================================================#
    
    
    Function GetWFEvents($InstanceId,$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 " +
              "FROM    EventSources INNER JOIN " +
                      "WfEvents ON EventSources.Id = WfEvents.EventSourceId " +
              "WHERE   WfEvents.WorkflowInstanceId = `'$InstanceId`'"
    
    
      Invoke-Sqlcmd -Query $SQL -Database $database
    }
    

    此脚本代码确保使用 SQL Server cmdlet 所需的组件加载到 Windows PowerShell 会话中。它还将添加一个名为 GetWFEvents 的实用工具函数。该函数允许查询监控数据库,从 Wfevents 视图检索工作流事件信息。该函数使用的 SQL 查询将执行与 EventSources 视图的内部结合,以识别与这些事件相关联的工作流。

  3. 关闭记事本,并单击“保存”以保存对 Utility.ps1 的更改。

  4. 在 Windows PowerShell 中,执行以下命令,以将对 Utility.ps1 的新更改导入到 Windows PowerShell 会话中。

    Import-Module .\Utility.ps1
    
  5. 在 Windows PowerShell 中输入以下命令,以使用新的脚本函数查询记录在监控数据库中的工作流实例的工作流事件。确保使用实例 ID 替代下面显示的 GUID。

    GetWFEvents 95a25419-0d71-42c4-ab70-aa523ba603fc OrderService_PS
    
  6. Windows PowerShell 中的输出应是与如下所示相似的一个事件列表。

    WorkflowName       : Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.OrderWorkflow
    Computer           : server1
    Site               : OrderService_PS
    VirtualPath        : /OrderWorkflowService/OrderWorkflow.xamlx
    EventID            : 975
    WorkflowInstanceId : 95a25419-0d71-42c4-ab70-aa523ba603fc
    TimeCreated        : 2009-11-01 10:06:57.6974305
    EventName          : Order completed
    State              : Closed
    ActivityName       :
    Exception          :
    
    WorkflowName       : Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.OrderWorkflow
    Computer           : server1
    Site               : OrderService_PS
    VirtualPath        : /OrderWorkflowService/OrderWorkflow.xamlx
    EventID            : 976
    WorkflowInstanceId : 95a25419-0d71-42c4-ab70-aa523ba603fc
    TimeCreated        : 2009-11-01 10:06:57.6974305
    EventName          : Order Service
    State              : Closed
    ActivityName       :
    Exception          :
    
    WorkflowName       : Microsoft.Samples.Dublin.Tutorials.OrderService.OrderWorkflowService.OrderWorkflow
    Computer           : server1
    Site               : OrderService_PS
    VirtualPath        : /OrderWorkflowService/OrderWorkflow.xamlx
    EventID            : 977
    WorkflowInstanceId : 95a25419-0d71-42c4-ab70-aa523ba603fc
    TimeCreated        : 2009-11-01 10:06:57.6974305
    EventName          :
    State              : Completed
    ActivityName       :
    Exception          :
    

此步骤中报告的事件提供了工作流中的活动状态和操作状态信息。该信息在运行时可用于监控工作流的进程。

有关查询监控数据库的详细信息,请参阅监控数据库视图和表

您还可能希望查看脚本示例使用 Windows PowerShell 查询 SQL 监控数据库。有关详细信息,请参阅示例

我刚刚做了什么?

在本课中,您学习了如何报告由 AppFabric 监控的工作流信息,以及如何识别实例。您还学习了如何对实例使用挂起、恢复和停止控制操作。最后,您使用了一个添加到 Utility.ps1 脚本模块的新脚本函数从监控数据库中报告工作流事件。

后续步骤

第 5 课:使用 Windows PowerShell 跟踪工作流

另请参阅

概念

第 1 课:Windows PowerShell 的 Windows Server AppFabric Cmdlet 入门
第 2 课:使用 Windows PowerShell 部署订单服务应用程序
第 3 课:为订单服务配置 Windows PowerShell
第 5 课:使用 Windows PowerShell 跟踪工作流

  2011-12-05