Routing dei messaggi dai bridge alle destinazioni nel progetto del servizio BizTalk

Aggiornamento: agosto 2015

Indirizzare i messaggi da un componente a un altro usando le condizioni di routing.

Uno dei chiari motivi per connettere vari componenti di un Progetto del servizio BizTalk è indirizzare il messaggio da un componente a un altro. There’s another requirement though – you might need to route the message from one source component to more than one destination component based on your business logic, which can also be termed as the routing condition. Se è presente più di una condizione di routing, è inoltre necessario impostare l'ordine in cui tali condizioni devono essere rispettate. Infine, possono essere presenti alcune azioni, ad esempio l'assegnazione di valori alle intestazioni di un messaggio, l'aggiunta di intestazioni personalizzate e così via, da eseguire sul messaggio prima che venga indirizzato alla destinazione. Questo argomento descrive questi aspetti nel dettaglio e inoltre fornisce istruzioni su come eseguire tali operazioni in un Progetto del servizio BizTalk.

Questo argomento descrive questi passaggi mediante uno scenario di esempio. Si supponga che un messaggio XML debba essere elaborato nel seguente formato tramite un Bridge XML unidirezionale.

<PaymentHistory xmlns:ns0="http://Integration.PipelineChaining">
  <BaseData>
    <Amount>10.4</Amount> 
    <CurrencyCode>CurrencyCode_0</CurrencyCode> 
    <EntryDate>1999-05-31</EntryDate> 
    <EntryTime>13:20:00.000-05:00</EntryTime> 
    <PaymentMode>Mode_0</PaymentMode> 
    <StatusCode>StatusCode_0</StatusCode> 
    <PurposeCode>PurposeCode_0</PurposeCode> 
  </BaseData>
</PaymentHistory>

La logica di business è tale che, se la modalità di pagamento è la carta di credito, il messaggio deve essere indirizzato a un servizio esterno unidirezionale. Se la modalità di pagamento sono i contanti, il messaggio deve essere indirizzato a un endpoint di inoltro unidirezionale. Se la modalità di pagamento non è nessuna di queste, il messaggio deve essere indirizzato a una coda di Bus di servizio.

Questa operazione è piuttosto semplice. È necessario definire la destinazione route a cui vengono indirizzati i messaggi in arrivo dopo essere stati elaborati dal bridge. Esistono alcune considerazioni relative alla destinazione a cui può essere indirizzato un messaggio da un Bridge XML unidirezionale o un Bridge XML di richiesta/risposta. Per altre informazioni su queste considerazioni, vedere Constraints on Using an XML One-Way Bridge e Constraints on Using an XML Request Reply Bridge.

La seguente procedura descrive come connettere due componenti di un flusso di messaggi.

  1. Creare un Progetto del servizio BizTalk, come descritto in Introduzione a un progetto di Visual Studio.

  2. Aggiungere i componenti al Progetto del servizio BizTalk, come descritto in diversi argomenti in Creare endpoint con funzionalità di messaggistica avanzate in Azure.

  3. Selezionare Connettore sotto la categoria Bridges nella Casella degli strumenti.

  4. Portare il puntatore del mouse a destra del componente, contrassegnato da un punto rosso quando si passa il cursore sopra di esso, che svolge la funzione di origine del messaggio. Il puntatore del mouse cambia e mostra un piccolo segno a forma di "S" che indica che questo componente aggiunge l'origine del messaggio. Fare clic e tenere il mouse sul punto, trascinarlo a sinistra del componente di destinazione (a questo punto il cursore cambia nuovamente e mostra una piccola "T" indicante la destinazione), quindi rilasciare il mouse. I due componenti sono ora connessi. Si noti che è possibile connettere un componente di origine a più di un componente di destinazione.

    noteNota
    Per l'attività cardine corrente, un flusso di messaggi deve sempre iniziare con un Bridge XML unidirezionale o un Bridge XML di richiesta/risposta. Successivamente, è possibile indirizzare il messaggio a qualsiasi componente, purché si rispettino i vincoli. I vincoli sono elencati in Constraints on Using an XML One-Way Bridge e in Constraints on Using an XML Request Reply Bridge.

    Nello scenario di esempio, è necessario connettere il Bridge XML unidirezionale a un servizio esterno unidirezionale, a un endpoint di inoltro unidirezionale e a una coda di Bus di servizio.

Oltre alla connessione fra due componenti, l'altro aspetto importante del routing è indirizzare il messaggio da un componente di origine a più di un componente di destinazione in base alla logica di business.

Nello scenario di esempio illustrato in precedenza, la condizione di routing deve essere basata sulla modalità di pagamento, indicata dall'elemento PaymentMode nel messaggio XML. Per implementare la logica di business in un Progetto del servizio BizTalk, è necessario creare filtri di routing per ogni condizione. La seguente procedura descrive come eseguire questa operazione.

noteNota
Prima di iniziare a creare i filtri, verificare di aver creato i tre connettori come descritto nella procedura precedente. È inoltre necessario aver creato una proprietà (ad esempio, PaymentMode) nella fase Enrich di un bridge per estrarre il valore dell'elemento PaymentMode nel messaggio XML.

La seguente procedura descrive come impostare le condizioni di routing in un Progetto del servizio BizTalk.

  1. Fare clic con il pulsante destro del mouse sul connettore di route tra il Bridge XML unidirezionale e il servizio esterno unidirezionale, quindi fare clic su Proprietà. Nel riquadro Proprietà per la proprietà Condizione filtro fare clic sul pulsante con i puntini di sospensione (…) per aprire la finestra di dialogo Configurazione filtro route.

  2. Nella finestra di dialogo selezionare l'opzione Filtro, quindi specificare la seguente stringa di filtro:

    PaymentMode='credit_card'
    
    noteNota
    Per le espressioni di filtro è necessario usare una sintassi SQL-92.

    Si noti che PaymentMode è la proprietà che deve essere specificata per l'estrazione nella fase Enrich e questa condizione di filtro, specificata nel connettore tra il Bridge XML unidirezionale e il servizio esterno unidirezionale, indica che il messaggio viene inviato al servizio esterno unidirezionale se la condizione è soddisfatta.

    Fare clic su OK per salvare le modifiche e uscire.

  3. Analogamente, per il connettore tra il Bridge XML unidirezionale e l'endpoint di inoltro unidirezionale, immettere la stringa di filtro come:

    PaymentMode='cash'
    
  4. Se la modalità di pagamento non è né contanti né carta di credito, il messaggio deve essere indirizzato a una coda di Bus di servizio. Per eseguire tale operazione nel flusso di messaggi, per il connettore tra il Bridge XML unidirezionale e la coda di Bus di servizio è necessario aprile la finestra di dialogo Configurazione filtro route, quindi selezionare Trova tutte le corrispondenze. In questo modo viene specificato che, se non è soddisfatta nessuna delle condizioni di filtro, questa condizione di filtro viene rispettata e il messaggio viene indirizzato a una coda di Bus di servizio.

Nella sezione precedente sono stati impostati i filtri nei connettori di route per assicurarsi che i messaggi corretti vengano indirizzati ai componenti corretti di un flusso di messaggi. Tuttavia, l'ordine di routing è altrettanto importante. Nello scenario descritto in precedenza, ad esempio, se un messaggio con PaymentMode impostato su credit_card viene indirizzato alla condizione di filtro che ha Trova tutte le corrispondenze impostato, verrà indirizzato a una coda di Bus di servizio anziché all'endpoint di servizio esterno unidirezionale. Pertanto, in base alla logica di business, la condizione Trova tutte le corrispondenze deve essere rispettata per ultima. A tal fine, impostare l'ordine in cui devono essere rispettate le condizioni di filtro.

  1. Fare clic con il pulsante destro del mouse sul Bridge XML (Bridge XML unidirezionale o Bridge XML di richiesta/risposta) e selezionare Proprietà. Nel riquadro Proprietà fare clic sul pulsante con i puntini di sospensione (…) nella proprietà Tabella ordine route.

  2. La finestra di dialogo Tabella ordine route mostra l'ordine predefinito in cui rispettare i filtri di route. L'ordine predefinito è l'ordine in cui sono stati creati i connettori di route. Per riordinare i filtri di route, selezionare un filtro di route, quindi usare i tasti freccia SU e GIÙ per organizzare i filtri nell'ordine corretto. È necessario ripetere questo passaggio per tutti i filtri di route fino a quando l'ordine di route non sarà quello desiderato.

  3. Fare clic su OK per salvare le modifiche e uscire.

È possibile aggiungere intestazioni di messaggio personalizzate o assegnare valori a intestazioni di messaggio standard prima di inviare il messaggio al ricevitore. A tal fine, usare l'azione route. Per altre informazioni, vedere Route Action.

Nell'esempio illustrato in precedenza si supponga che il messaggio debba essere inviato a un servizio esterno unidirezionale con un'intestazione SOAP personalizzata (CustomerName) e un valore.

  1. Fare clic con il pulsante destro del mouse sul connettore di route tra il bridge e il servizio esterno unidirezionale, quindi fare clic su Proprietà. Nel riquadro Proprietà per la proprietà Azione route fare clic sul pulsante con i puntini di sospensione (…) per aprire la finestra di dialogo Azioni route.

  2. Nella finestra di dialogo Azioni route fare clic su Aggiungi per aprire la finestra di dialogo Aggiungi azione route. Nella finestra di dialogo Aggiungi azione route eseguire le operazioni seguenti:

     

    Sezione Nome campo Descrizione

    Proprietà (Leggi da)

    Nome proprietà

    Elenca tutte le proprietà definite nelle due fasi Enrich precedenti nel Bridge XML di richiesta/risposta. Quando si seleziona una proprietà, si specifica che il valore della proprietà selezionata deve essere assegnato all'intestazione di messaggio pertinente del messaggio in uscita.

    Espressione

    Usare questa opzione per fornire un'espressione, il cui valore risultante viene passato all'intestazione di messaggio pertinente del messaggio in uscita. È anche possibile usare questa opzione per immettere un valore costante che viene assegnato a un'intestazione di messaggio. Di seguito sono riportate alcune espressioni di esempio:

    • P1 + P2, dove P1 e P2 sono due proprietà già definite in una delle due fasi Enrich precedenti

    • 'Fabrikam', una costante di stringa

      ImportantImportante
      È sempre necessario immettere il valore per un'espressione tra virgolette singole.

    ImportantImportante
    È possibile scegliere l'opzione Nome proprietà o l'opzione Espressione. Queste opzioni si escludono reciprocamente.

    Destinazione (Scrivi in)

    Tipo

    Immettere il tipo di messaggio in uscita, alla cui intestazione viene assegnato il valore immesso in precedenza.

    A seconda della destinazione del messaggio, i valori disponibili nell'elenco a discesa variano.

    • Se si esegue il routing a un servizio esterno o a un endpoint di inoltro (unidirezionale o bidirezionale), i valori disponibili nell'elenco a discesa sono SOAP e HTTP.

    • Se si esegue il routing a una coda o a un argomento, i valori disponibili nell'elenco a discesa sono SOAP e negoziata.

    • Se si esegue il routing a una destinazione FTP, il valore disponibile nell'elenco a discesa è FTP.

    • Se si esegue il routing a una destinazione SFTP, il valore disponibile nell'elenco a discesa è SFTP.

    • Se si esegue il routing a un BLOB di Azure, il valore disponibile nell'elenco a discesa è BLOB di Azure.

    Spazio dei nomi dell'intestazione SOAP (solo se Tipo è impostato su SOAP)

    Immettere lo spazio dei nomi dell'intestazione SOAP personalizzata a cui viene assegnato il valore.

    ImportantImportante
    Questo campo viene disabilitato se si seleziona un'intestazione standard nell'elenco a discesa Identificatore. È necessario immettere uno spazio dei nomi solo per le intestazioni SOAP personalizzate.

    Questo campo viene disabilitato anche se il Tipo è impostato su HTTP o Brokered.

    Identificatore

    Immettere il nome della proprietà dell'intestazione del messaggio a cui viene assegnato il valore.

    È anche possibile immettere intestazioni personalizzate. Per il tipo di messaggio SOAP, nell'elenco a discesa sono presenti i quattro identificatori standard. For HTTP message type, because there’s a huge list of standard headers, the drop-down does not list any headers. Per i tipi di messaggio SOAP e HTTP, è possibile elencare un'intestazione personalizzata di cui si desidera assegnare i valori a un'altra proprietà.

    Per altri tipi di destinazione come FTP, SFTP e i BLOB di Azure, è possibile selezionare le intestazioni del messaggio in cui deve essere scritto il valore della proprietà.

    Nell'esempio illustrato in precedenza, è necessario impostare questa opzione su CustomerName, poiché è il nome dell'intestazione personalizzata da includere nel messaggio in uscita.

  3. Fare clic su OK nella finestra di dialogo Aggiungi azione route. Le finestre di dialogo devono essere simili alle seguenti:

    Azioni route

    Tale finestra di dialogo indica che il bridge usa il valore della proprietà P1 (già definito in una delle fasi Enrich precedenti) e lo assegna all'intestazione SOAP personalizzata CustomerName con spazio dei nomi http://schemas.microsoft.com/integration/promotedpropertiesinfo, quindi lo invia al ricevitore di messaggi.

    ImportantImportante
    Se si creano due azioni route nello stesso connettore di route che puntano alla stessa destinazione usando due proprietà diverse, ad esempio P1 e P2, non si verificherà un errore di compilazione. L'ultima azione route esegue l'override delle azioni route definite in precedenza. In questo esempio viene rispettata l'azione route per la proprietà P2.

  4. Per aggiornare o rimuovere un'azione route, è possibile selezionarla nella finestra di dialogo, quindi fare clic rispettivamente su Modifica o su Rimuovi. Fare clic su OK nella finestra di dialogo Azioni route, quindi fare clic su Salva per salvare le modifiche in un Configurazione bridge.

Vedere anche

Mostra: