如何配置 BAM WCF 截获

若要为 WCF 拦截配置 BAM,必须修改拦截器配置文件以访问事件源的正确程序集清单文件。

配置事件时,必须正确指定格式的 XPath 表达式用于动作。

可以通过启用 WCF 跟踪并运行应用程序来生成包含消息的示例 WCF 日志,来创建格式正确的 XPath 表达式,以便在拦截器配置中使用。 可以使用 Microsoft服务跟踪查看器 (SvcTraceViewer.exe)查看日志并提取消息。 查看器包含在 WCF SDK 中。 然后,可以根据消息形成所需的 XPath 表达式,并将其应用于拦截器配置。

配置 BAM WCF 截获时,machine.config 文件中使用的行为扩展与接收位置的自定义行为配置中使用的扩展匹配至关重要。 更改 machine.config 文件中已配置接收位置的扩展名称会导致操作加载失败。 此外,接收位置的配置 UI 将失败。

对于群集方案,由于自定义行为仅配置一次,因此必须确保群集中计算机上的所有 machine.config 文件都指定相同的文件扩展名。

设置清单

  1. 将侦听器配置中的 EventSource 中的清单设置为“Microsoft.BizTalk.Adapter.Wcf.Runtime.ITwoWayAsyncVoid,Microsoft.BizTalk.Adapter.Wcf.Runtime,版本=3.0.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”

    注释

    接口会根据所使用的服务/接收端口的类型更改。 根据下表更改清单行以反映使用的端口类型。

    端口类型 使用
    双向端口 ITwoWayAsync
    具有绑定的一种单向端口,本质上是双向的(例如 HTTP)。 ITwoWayAsyncVoid
    具有绑定的单向端口在事务中本质上是双向端口。 ITwoWayAsyncVoidTxn
    单向绑定(例如 MSMQ)。 IOneWayAsync
    绑定是事务的一种方式。 IOneWayAsyncTxn

    重要

    在筛选器中,请不要使用 GetOperationName 操作,而应使用如下示例中所示的 XPath 操作。 对于通用合约,所有消息都会到达某个通用操作,此时它们将基于消息本身(动作属性)路由到特定操作。

  2. 此时,操作名称将始终相同。 对于 WCF 适配器(使用泛型协定),使用的方法为 BizTalkSubmit。 可以使用 XPath 来替代 GetOperationName 获取操作名称的 Action 节点。 然后,您可以筛选操作名称。

示例侦听器配置

此示例显示了 WCF 适配器的 ServiceRequest 和 ServiceReply 用法。 在突出显示的部分中,操作上的 XPath 表达式用于对操作进行筛选,而不是使用 GetOperationName。 也可以筛选回复,但仅在 ITwoWayAsync 的情况下。 所有其他接口不返回任何值或返回 void。

服务请求

<ic:OnEvent IsBegin="true" IsEnd ="false" Name ="WCFServiceRequest" Source="WCFService">  
      <ic:Filter>  
        <ic:Expression>  
          <wcf:Operation Name="GetServiceContractCallPoint"/>  
          <ic:Operation Name ="Constant">  
            <ic:Argument>ServiceRequest</ic:Argument>  
          </ic:Operation>  
          <ic:Operation Name ="Equals" />  
          <wcf:Operation Name ="XPath">  
            <wcf:Argument>//s:Header/a:Action</wcf:Argument>  
          </wcf:Operation>  
          <ic:Operation Name ="Constant">  
            <ic:Argument>Operation1</ic:Argument>  
          </ic:Operation>  
          <ic:Operation Name ="Equals" />  
          <ic:Operation Name ="And" />  
        </ic:Expression>  
      </ic:Filter>  
  
      <ic:CorrelationID>  
        <ic:Expression>  
          <wcf:Operation Name="AutoGenerateCorrelationToken"/>  
        </ic:Expression>  
      </ic:CorrelationID>  
  
      <ic:Update DataItemName ="Activity Date" Type ="DATETIME">  
        <ic:Expression>  
          <wcf:Operation Name ="GetContextProperty">  
            <wcf:Argument>EventTime</wcf:Argument>  
          </wcf:Operation>  
        </ic:Expression>  
      </ic:Update>  
  
      <ic:Update DataItemName ="Source" Type ="NVARCHAR">  
        <ic:Expression>  
          <ic:Operation Name="Constant">  
            <ic:Argument>WcfAdapter_ServiceRequest</ic:Argument>  
          </ic:Operation>  
        </ic:Expression>  
      </ic:Update>  
  
    </ic:OnEvent>  

ServiceReply

<ic:OnEvent IsBegin="true" IsEnd ="false" Name ="WCFServiceReply" Source="WCFService">  
      <ic:Filter>  
        <ic:Expression>  
          <wcf:Operation Name="GetServiceContractCallPoint"/>  
          <ic:Operation Name ="Constant">  
            <ic:Argument>ServiceReply</ic:Argument>  
          </ic:Operation>  
          <ic:Operation Name ="Equals" />  
        </ic:Expression>  
      </ic:Filter>  
  
      <ic:CorrelationID>  
        <ic:Expression>  
          <wcf:Operation Name="AutoGenerateCorrelationToken"/>  
        </ic:Expression>  
      </ic:CorrelationID>  
  
      <ic:Update DataItemName ="Activity Date" Type ="DATETIME">  
        <ic:Expression>  
          <wcf:Operation Name ="GetContextProperty">  
            <wcf:Argument>EventTime</wcf:Argument>  
          </wcf:Operation>  
        </ic:Expression>  
      </ic:Update>  
  
      <ic:Update DataItemName ="Name" Type ="NVARCHAR">  
        <ic:Expression>  
          <ic:Operation Name="Constant">  
            <ic:Argument>WcfAdapter_ServiceReply</ic:Argument>  
          </ic:Operation>  
        </ic:Expression>  
      </ic:Update>  
  
    </ic:OnEvent>  

另请参阅

配置 WCF 适配器以截获 BAM 数据