Condividi tramite


Come configurare l'intercettazione WCF in BAM

Per configurare BAM per l'intercettazione WCF, è necessario modificare il file di configurazione dell'intercettore per accedere al manifesto dell'assembly appropriato per le origini eventi.

Quando si configurano gli eventi, è necessario specificare espressioni XPath formattate correttamente per le azioni.

È possibile creare espressioni XPath formattate correttamente da usare nella configurazione dell'intercettore abilitando la traccia WCF ed eseguendo l'applicazione per produrre un log WCF di esempio contenente il messaggio. È possibile usare Microsoft Service Trace Viewer (SvcTraceViewer.exe) per visualizzare il log ed estrarre il messaggio. Questo visualizzatore è incluso nell'SDK di WCF. L'espressione XPath desiderata può quindi essere formata in base al messaggio e applicata alla configurazione dell'intercettore.

Quando si configura l'intercettazione WCF di BAM, è importante che l'estensione di comportamento utilizzata nel file machine.config corrisponda all'estensione utilizzata nella configurazione del comportamento personalizzato dell'indirizzo di ricezione. Se nel file machine.config viene cambiato il nome dell'estensione di un indirizzo di ricezione configurato, il comportamento non verrà caricato e inoltre l'interfaccia utente di configurazione dell'indirizzo di ricezione presenterà problemi di funzionamento.

Nel caso di uno scenario in cluster, poiché il comportamento personalizzato viene configurato una sola volta, è necessario verificare che per tutti i file machine.config inclusi nei computer del cluster sia specificata la stessa estensione di file.

Per impostare il manifesto

  1. Impostare il manifesto in EventSource nella configurazione dell'intercettazione su 'Microsoft.BizTalk.Adapter.Wcf.Runtime.ITwoWayAsyncVoid, Microsoft.BizTalk.Adapter.Wcf.Runtime, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

    Nota

    L'interfaccia varia in base al tipo di porta di servizio/ricezione utilizzata. Modificare la riga del manifesto in base al tipo di porta utilizzata. A tale scopo, fare riferimento alla tabella riportata di seguito.

    Tipo di porta Uso
    Porte bidirezionali ITwoWayAsync
    Porte unidirezionali con binding costituite implicitamente da due porte bidirezionali, ad esempio HTTP. ITwoWayAsyncVoid
    Porte unidirezionali con binding costituite implicitamente da due porte bidirezionali con transazioni. ITwoWayAsyncVoidTxn
    Binding unidirezionali, ad esempio MSMQ. IOneWayAsync
    Binding unidirezionali con transazioni. IOneWayAsyncTxn

    Importante

    Nel filtro, anziché usare l'operazione GetOperationName , utilizzare l'operazione XPath come evidenziato nell'esempio seguente. Per gli accordi generici, tutti i messaggi arrivano in corrispondenza di un'operazione generica, quindi vengono instradati verso operazioni specifiche in base al messaggio stesso (attributo Action).

  2. Il nome dell'operazione sarà sempre lo stesso a questo punto. In caso di adapter WCF (che utilizzano contratti generici), viene utilizzato il metodo BizTalkSubmit. Per recuperare il nome dell'operazione, è possibile utilizzare un'espressione XPath per il nodo dell'azione anziché GetOperationName, quindi applicare un filtro per il nome dell'operazione.

Configurazioni di esempio dell'intercettore

In questo esempio viene illustrato l'utilizzo di ServiceRequest e ServiceReply per l'adattatore WCF. Nella sezione evidenziata viene usata un'espressione XPath nell'azione per filtrare l'operazione anziché usare GetOperationName. È possibile applicare un filtro anche per la risposta, ma solo in caso di ITwoWayAsync. Tutte le altre interfacce non restituiscono alcun valore oppure restituiscono void.

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>  

Vedere anche

Configurazione dell'adapter WCF per l'intercettazione dei dati BAM