如何配置 Windows Communication Foundation 应用程序进行拦截

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

安装 BAM-Eventing 软件

在将 WCF 应用程序配置为使用 WCF 的 BAM 拦截器之前,必须使用 BizTalk Server 安装程序安装 BAM-Eventing 软件。 有关安装 BAM-Eventing 软件和注册性能计数器的详细信息,请参阅 安装 BAM-Eventing 软件

配置用于跟踪的 WCF 应用程序

在 WCF 应用程序开始编写 BAM 事件信息之前,必须完成四个任务:

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

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

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

  • 必须修改服务器和客户端应用程序 App.config 文件才能加载 BAM 跟踪服务。 修改 App.config 文件后,必须重启应用程序。

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

部署观察模型

必须先部署观察模型,然后才能在应用程序中部署拦截器配置文件或捕获 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-all -Definitionfile:<definitionfile.xml>

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

    注释

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

  5. 键入 Exit ,然后按 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. 键入 Exit ,然后按 Enter 关闭命令提示符。

    如果已部署 WCF 应用程序,则在下次轮询间隔之前,不会加载新配置。 但是,如果您配置应用程序并重新启动它,配置将会立即生效。

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

BAM 拦截器框架使用每活动 SQL Server 角色来控制对活动和配置信息的访问。 必须将运行 WCF 应用程序的用户帐户添加到 BAMPrimaryImport 数据库中的适当 BAM 活动角色中。

配置 Windows Communication Foundation 应用程序以加载 BAM 跟踪服务

通过向服务器或客户端应用程序的 App.config 文件添加几行,将应用程序配置为加载 BAM 跟踪服务。

若要在 WCF 服务器或客户端应用程序中启用 BAM 跟踪,需要修改 App.config 配置文件,以包含其他终结点行为和行为扩展,并添加行为配置属性。 服务和客户端模板的格式类似。

配置 WCF 应用程序时,请注意以下事项。 如果在 App.config 中为同一应用程序定义了多个 BAM 终结点行为配置,即同一客户端或服务,BAM 将执行以下操作。

  • 如果连接字符串不同,BAM 将引发异常。

  • 仅当轮询间隔不同,BAM 将选择其中一个并继续。 在设计时无法确定将选择哪一个。

注释

如果连接字符串相同,这意味着它们引用同一台计算机,BAM 处理将正常进行。

以下示例为 WCF 服务器应用程序配置了 App.config 模板。 它定义了一个终结点,该终结点使用配置为使用 WCF 拦截器的自定义行为“bamEndpointBehavior”。

<system.serviceModel>  
  <services>  
    <service name="Service.CreditCardAuthorization">  
      <!-- The endpoint will use the "bamEndpointBehavior" -->   
      <endpoint address="http://localhost:8081/CreditCardService" contract="Service.ICreditCardAuthorization" name="CreditCardEndPoint" binding ="wsDualHttpBinding" bindingConfiguration="wsDualHttpBinding_ICreditCardAuthorization" behaviorConfiguration="bamEndpointBehavior"/>  
    </service>  
  </services>  
  <bindings>  
    <wsDualHttpBinding>  
      <binding name="wsDualHttpBinding_ICreditCardAuthorization" transactionFlow="true" />  
    </wsDualHttpBinding>  
  </bindings>  
  <behaviors>  
    <endpointBehaviors>  
      <!-- Define a new behavior named "bamEndpointBehavior" -->  
      <behavior name="bamEndpointBehavior">  
        <BamEndpointBehaviorExtension ConnectionString="Initial Catalog=BamPrimaryImport;Data Source=MyMachine;Integrated Security=SSPI;" InterceptorConfigurationPollingInterval="1500" />  
      </behavior>  
    </endpointBehaviors>  
  </behaviors>  
  <extensions>  
    <behaviorExtensions>  
      <!-- Define a new enpoint behavior extension using WCF interceptor -->  
      <add name="BamEndpointBehaviorExtension" type="Microsoft.BizTalk.Bam.Interceptors.Wcf.BamEndpointBehavior, Microsoft.BizTalk.Bam.Interceptors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />  
    </behaviorExtensions>  
  </extensions>  
</system.serviceModel>  

在自己的 App.config 文件中使用它之前,需要对此模板进行少量更改。

在 WCF 服务 App.config 文件中使用此模板
  1. 打开与应用程序关联的 App.config 文件。 可以将 Notepad.exe 或其他文本编辑器用于此任务。

  2. 使用以下 XML 将 WCF BamEndpointBehavior 行为扩展添加到 extensions 元素:

    <behaviorExtensions>  
      <add name="BamEndpointBehaviorExtension" type="Microsoft.BizTalk.Bam.Interceptors.Wcf.BamEndpointBehavior, Microsoft.BizTalk.Bam.Interceptors, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />  
    </behaviorExtensions>  
    

    注释

    行为扩展名为“BamEndpointBehaviorExtension”,可以根据需要更改以满足你的环境。

  3. 使用以下 XML 向 behaviors 元素添加一个使用新行为扩展的新终结点行为。 行为扩展提供连接字符串和轮询间隔(以秒为单位)。

    <endpointBehaviors>  
      <behavior name="bamEndpointBehavior">  
        <BamEndpointBehaviorExtension ConnectionString="Initial Catalog=BamPrimaryImport;Data Source=MyMachine;Integrated Security=SSPI;" InterceptorConfigurationPollingInterval="1500" />  
      </behavior>  
    </endpointBehaviors>  
    

    将数据源替换为环境中托管 BamPrimaryImport 数据库的计算机的名称。 更改轮询间隔以满足你的要求;一个较大的数字意味着 WCF 侦听器检测配置更改需要更长的时间。 如果更改了行为扩展的名称,请使用它替换“BamEndpointBehaviorExtension”。

    注释

    行为的名称是“bamEndpointBehavior”,可以根据需要更改以适应你的环境。

    注释

    指定 ConnectionString时避免使用明文用户名/密码组合。 这样做可能会损害数据库服务器。

    注释

    必须指定 PollingIntervalSec 大于或等于 5(秒)。 如果指定较低的值或省略 PollingIntervalSec 元素,将引发错误,并且不会配置拦截。

  4. behaviorConfiguration 属性添加到要跟踪的终结点,并提供新行为的名称:

    <endpoint address="http://localhost:8081/CreditCardService" contract="Service.ICreditCardAuthorization" name="CreditCardEndPoint" binding ="wsDualHttpBinding" bindingConfiguration="wsDualHttpBinding_ICreditCardAuthorization" behaviorConfiguration="bamEndpointBehavior"/>  
    

    注释

    如果使用了其他行为名称,请改为提供它。

    可以将行为配置应用到多个终结点。

  5. 保存修改 App.config 文件并重启应用程序。