Creazione di istanze e inizializzazione di un adapter di trasmissione
Per impostazione predefinita, le schede di invio non vengono create istanze finché il primo messaggio non viene recapitato, un processo noto come "creazione differita". L'approccio predefinito per la creazione differita consente di risparmiare risorse di sistema. Dopo che è stato creato, l'adapter di trasmissione viene inserito e mantenuto nella cache fino a quando non viene arrestato il servizio BizTalk Server.
Il membro InitTransmitterOnServiceStart dell'enumerazione Capabilities indica al motore di messaggistica di creare l'adattatore di trasmissione all'avvio del servizio, anziché usare la creazione differita predefinita, se necessario.
Rispetto al recapito in batch, l'invio di un messaggio è un modello diverso dal modello di ricezione di un messaggio. Nel caso della ricezione, l'adapter deve inserire i messaggi in ingresso in un batch ottenuto dal motore di messaggistica. Nel caso della trasmissione, il motore di messaggistica ottiene un batch dall'adapter e invia i messaggi da trasmettere all'adapter. In entrambi i casi, per ottenere gli oggetti del batch di messaggi viene utilizzato il trasporto proxy.
Come viene inizializzato un adapter di trasmissione
Per consentire la configurazione e il binding al trasporto proxy, gli adapter devono implementare le interfacce di configurazione seguenti:
IBTTransport
IBaseComponent
IBTTransportControl
IPersistPropertyBag
Nella procedura seguente viene descritta la sequenza di eventi coinvolti nell'inizializzazione di un adapter di trasmissione:
Quando il motore di messaggistica inizializza un adattatore di trasmissione, esegue prima una queryInterface per IPersistPropertyBag, che è un'interfaccia facoltativa. Se l'adattatore implementa l'interfaccia , la configurazione del gestore viene passata all'adattatore nella chiamata al metodo Load . L'adapter utilizza queste informazioni per garantire che la configurazione venga eseguita correttamente.
Il motore di messaggistica esegue un oggetto QueryInterface per IBTTransportControl, che è un'interfaccia obbligatoria.
Il motore chiama IBTTransportControl.Initialize, passando il proxy di trasporto per l'adattatore.
Il motore di messaggistica esegue un oggetto QueryInterface per IBTTransmitter.
Se l'interfaccia viene rilevata, l'adapter viene trattato come un trasmettitore incompatibile con i batch.
Se il motore di messaggistica non individua questa interfaccia, il motore di messaggistica esegue un oggetto QueryInterface per IBTBatchTransmitter, individuazione del quale indica che l'adattatore è un trasmettitore compatibile con batch.
Se il motore di messaggistica non rileva nessuna delle due interfacce, si verifica una condizione di errore che impedisce l'inizializzazione. L'inizializzazione non può essere eseguita se non vengono rilevate tutte le interfacce obbligatorie.
Nel diagramma seguente viene illustrata questa sequenza di chiamate API. Le interfacce implementate dall'adapter sono visualizzate in blu.
L'adapter può inviare messaggi non appena viene inizializzato e configurato.
Nella figura seguente sono illustrate le interazioni degli oggetti coinvolte nell'inizializzazione di un adapter di trasmissione.
Flusso di lavoro per l'inizializzazione di un adapter di trasmissione
Nota
Gli adapter non devono bloccare il motore di messaggistica nelle chiamate, ad esempio IBTTransportControl.Initialize e IPersistPropertyBag.Load. L'esecuzione di un numero eccessivo di operazioni di elaborazione durante queste chiamate influisce negativamente sul tempo di avvio del servizio.