如何配置 Workflow Foundation 应用程序用于侦听

必须先安装 BAM 侦听器软件并将应用程序配置为使用 Windows Workflow Foundation (WF) 侦听器服务,然后才能开始收集 BAM 活动数据。 假定已成功安装BizTalk Server及其依赖项,并至少创建了一个 BizTalk 组。

安装 BAM-Eventing 软件

必须先使用 BizTalk Server 安装程序安装 BAM-Eventing 软件,然后才能将 WF 应用程序配置为使用 WF 的 BAM 侦听器。 有关安装 BAM-Eventing 软件和注册性能计数器的详细信息,请参阅 安装 BAM-Eventing 软件

配置 Windows Workflow Foundation 应用程序用于跟踪

必须先完成四个任务,WF 应用程序才能开始编写 BAM 事件信息:

  • 必须使用 BizTalk Server BAM 工具创建观察模型,然后使用 BAM 管理器命令行工具 (bm.exe) 进行部署。

  • 必须使用 BAM Manager 命令行工具 (bm.exe) 创建和部署侦听器配置文件。

  • 运行主机应用程序的用户必须是相应 BAM 活动事件编写器 (bam_< 活动>_EventWriter) SQL Server角色的成员,以便应用程序能够读取侦听器配置信息并写入 BAM 活动。

  • 必须修改 App.config 文件和该应用程序本身才能加载 BAM 跟踪服务并重新启动该应用程序。

    只有在成功完成这些任务后,事件才会开始出现在 BizTalk Server BAM 数据库中。

部署观察模型

您必须先部署观察模型,然后才能在应用程序中部署侦听器配置文件或捕获 BAM 活动。

使用 bm.exe 部署观察模型
  1. 单击 “开始 ”,然后单击“ 运行 ”打开 Windows 命令提示符。

  2. “打开”字段中键入 cmd,然后单击“确定”。

  3. 使用更改目录命令转至包含要部署的观察模型的目录。 例如, cd c:\businessprocess\Orders

  4. 使用 bm.exe 部署观察模型:

    c:\Program Files (x86) \Microsoft BizTalk Server <VERSION>\Tracking\BM.exe deploy-all -definitionfile:<definitionfile.xml>

    请确保将definitionfile.xml> 替换为<要部署的观察文件的名称。 有关更多选项,请参阅 侦听器管理命令

    注意

    在支持用户帐户控制 (UAC) 的系统上,可能需要具有管理权限才能运行该工具。

  5. 键入 “退出”,然后按 Enter 关闭命令提示符。

部署侦听器配置文件

必须先部署侦听器配置文件,然后应用程序才能捕获 BAM 活动。

使用 bm.exe
  1. 单击 “开始 ”,然后单击“ 运行 ”打开 Windows 命令提示符。

  2. “打开”字段中键入 cmd,然后单击“确定”。

  3. 使用更改目录命令转至包含要部署的侦听器配置文件的目录。 例如, cd c:\businessprocess\Orders

  4. 使用 bm.exe 部署侦听器配置文件:

    \Program Files (x86) \Microsoft BizTalk Server <VERSION>Tracking\BM.exe deploy-interceptor -filename:<icfile.xml>

    请确保将icfile.xml> 替换为<要部署的侦听器配置文件的名称。

    注意

    可以使用 -Force:True 标志替代与侦听器配置文件中名称相同的现有事件源 () 。 如果这样做,请确保使用 get-interceptor 命令备份现有配置。 使用 -Force:True 标志可能会删除所有引用被覆盖的事件源的侦听器配置。

    注意

    在支持用户帐户控制 (UAC) 的系统上,可能需要具有管理权限才能运行该工具。

  5. 键入 “退出”,然后按 Enter 关闭命令提示符。

    如果已部署 WF 应用程序,则在下一轮询间隔之前不会加载新配置。 但是,如果对应用程序进行配置后重新启动它,则将立即提取该配置。

将用户添加到相应的 BAM 活动角色

BAM 侦听器框架使用每个活动的 SQL Server 角色控制对活动和配置信息的访问权限。 必须将运行 WF 应用程序的用户帐户添加到 BAM 主导入数据库中 () 的相应 BAM 活动角色。

将该应用程序配置为加载 BAM 跟踪服务

在 WF 应用程序中加载 BAM 跟踪服务有三种方案:

  • 如果 WF 应用程序已使用 WorkflowRuntime 加载 WF 配置节,则可以将 BAM 跟踪服务信息添加到现有部分。

  • 如果 WF 应用程序未使用 WorkflowRuntime 加载 WF 配置节,则必须添加代码以从应用程序配置文件加载自定义节。 您必须创建该配置部分,然后将 BAM 跟踪服务信息添加到该配置部分。

  • 如果希望对配置进行硬编码,可以使用 WF API 以编程方式加载跟踪服务,而无需配置文件,或者从自定义源加载配置。

    配置 WF 应用程序时,请注意以下注意事项:

  • WF 侦听器仅支持每个 WorkflowRuntime 一个 BamTrackingService。

  • WF 侦听器支持每个应用程序域的多个 BamTrackingService 实例。

    • N 个 WorkflowRuntime 支持 N 个 BamTrackingService。
  • 如果不同的连接字符串用于同一应用程序域中的不同 BamTrackingService 实例,侦听器将引发异常。

  • 侦听器从其启动的首个 BamTrackingService 实例获取 IC 轮询间隔值。

  • 应用程序域中的最后一个 BamTrackingService 停止后,侦听器将停止 IC 轮询线程

    有关 WorkflowRuntime 和加载配置信息的详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=83314

为 BAM 跟踪服务配置 App.config 文件
  1. 打开与您的应用程序关联的 App.config 文件。 可以使用 Notepad.exe 或其他文本编辑器执行此任务。

  2. 添加 BAM 跟踪服务,方法为将以下配置信息插入 App.config 文件。 应将其定位为 元素的子元素 configuration

    注意

    此部分元素应与在使用 WorkflowRuntime 类时您的应用程序代码所使用的名称对应。

    <!-- The element name must match the one expected by WorkflowRuntime in your WF application -->
    <WorkflowServiceContainer>
      <Services>
        <add type="Microsoft.BizTalk.Bam.Interceptors.Workflow.BamTrackingService, Microsoft.BizTalk.Bam.Interceptors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       ConnectionString="Integrated Security=SSPI;Data Source=.;Initial Catalog=BAMPrimaryImport"
          PollingIntervalSec="5"/>
        </Services>
    </WorkflowServiceContainer>
    
  3. 修改 ConnectionString 属性以匹配环境。

  4. 重启应用程序。

修改应用程序以加载自定义配置部分
  1. 在 Visual Studio 中打开 Windows Workflow Foundation 项目。

  2. 将带有适当参数的 BamTrackingService 新实例添加到应用程序的 WorkflowRuntime 实例:

    // !! Replace "WorkflowServiceContainer" with the section name
    // you used in your App.config file.
    WorkflowRuntime workflowRuntime = new WorkflowRuntime("WorkflowServiceContainer");
    
  3. 重新编译并部署修改后的应用程序。

修改应用程序以通过编程方式加载 BAM 跟踪服务
  1. 在 Visual Studio 中打开 Windows Workflow Foundation 项目。

  2. 将带有适当参数的 BamTrackingService 新实例添加到应用程序的 WorkflowRuntime 实例:

    string connectionString = "Integrated Security=SSPI;Data Source=.;Initial Catalog=BAMPrimaryImport"
    int pollingInterval = 5;
    WorkflowRuntime workflowRuntime = new WorkflowRuntime();
    workflowRuntime.AddService(new BamTrackingService(connectionString, pollingInterval));
    

    根据环境的具体情况,您可以添加或删除参数。

  3. 重新编译并部署修改后的应用程序。