Compartir a través de


Cómo configurar la intercepción de WCF de BAM

Para configurar BAM para la intercepción de WCF, es necesario modificar el archivo de configuración del interceptor para obtener acceso al manifiesto del ensamblado adecuado para los orígenes de eventos.

Al configurar los eventos, debe especificar expresiones XPath con el formato correcto para las acciones.

Puede crear expresiones XPath con el formato correcto para usarlas en la configuración del interceptor habilitando el seguimiento de WCF y ejecutando la aplicación para generar un registro WCF de ejemplo que contiene el mensaje. Puede usar microsoft Service Trace Viewer (SvcTraceViewer.exe) para ver el registro y extraer el mensaje. El visor se incluye con el SDK de WCF. La expresión XPath deseada se puede formar en función del mensaje y aplicarla a la configuración del interceptor.

Al configurar la intercepción de WCF de BAM, es fundamental que la extensión del comportamiento usada en el archivo machine.config coincida con la extensión usada en la configuración de comportamiento personalizado de la ubicación de recepción. Si se cambia el nombre de la extensión de una ubicación de recepción configurada en el archivo machine.config se producirán errores en la carga del comportamiento. Además, también se producirán errores en la interfaz de usuario de configuración de la ubicación de recepción.

Si se trata de un escenario agrupado, dado que el comportamiento personalizado se configura sólo una vez, debe asegurarse de que todos los archivos machine.config en los equipos del clúster especifican la misma extensión del nombre de archivo.

Para establecer el manifiesto

  1. Establezca el manifiesto en EventSource en la configuración de intercepción como "Microsoft.BizTalk.Adapter.Wcf.Runtime.ITwoWayAsyncVoid, Microsoft.BizTalk.Adapter.Wcf.Runtime, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”.

    Nota

    La interfaz cambia de acuerdo con el tipo de puerto de recepción/servicio utilizado. Cambie la línea de manifiesto para reflejar el tipo de puerto que va a utilizar según la tabla siguiente.

    Tipo de puerto Uso
    Puertos bidireccionales ITwoWayAsync
    Puertos unidireccionales con enlaces que son de forma inherente bidireccionales (por ejemplo, HTTP). ITwoWayAsyncVoid
    Puertos unidireccionales con enlaces que son de forma inherente bidireccionales con transacciones. ITwoWayAsyncVoidTxn
    Enlaces que son unidireccionales (por ejemplo, MSMQ). IOneWayAsync
    Enlaces que son unidireccionales con transacciones. IOneWayAsyncTxn

    Importante

    En el filtro, en lugar de usar la operación GetOperationName , use la operación XPath como se resalta en el ejemplo siguiente. Para los contratos genéricos todos los mensajes llegan a alguna operación genérica, en cuyo punto se enrutan a operaciones específicas según el propio mensaje (atributo de acción).

  2. El nombre de operación será siempre el mismo en este punto. Si se trata de adaptadores de WCF (que utilizan contratos genéricos) el método que se utiliza es BizTalkSubmit. Puede utilizar un XPath para el nodo Acción en vez de GetOperationName para recuperar el nombre de la operación. Después, puede filtrar según el nombre de operación.

Configuraciones de interceptor de ejemplo

En este ejemplo se muestra el uso de ServiceRequest y de ServiceReply para el adaptador de WCF. En la sección resaltada, se usa una expresión XPath en la acción para filtrar por la operación en lugar de usar GetOperationName. También puede filtrar en la respuesta aunque sólo en el caso de ITwoWayAsync. Las demás interfaces no devuelven nada o valores nulos.

ServiceRequest

<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>  

Consulte también

Configuración del adaptador de WCF para interceptar datos de BAM