Interfaccia IBaseMessage

Quando un adattatore di ricezione accetta un pacchetto di dati in ingresso tramite il protocollo, usa l'interfaccia IBaseMessage per creare un messaggio da passare al motore di messaggistica. Tutti i messaggi vengono rappresentati tramite questa interfaccia.

Un messaggio ha una o più parti del messaggio rappresentate dall'interfaccia IBaseMessagePart . Ogni parte del messaggio ha un riferimento ai dati tramite un puntatore all'interfaccia IStream . Il contesto di un messaggio è rappresentato dalla relativa interfaccia IBaseMessageContext . Nella figura seguente viene illustrato il modello a oggetti messaggio BizTalk.

Immagine che mostra il modello a oggetti del messaggio BizTalk.

Il contesto del messaggio è un dizionario codificato in base a una combinazione di nomi proprietà e spazio dei nomi proprietà. In questo modo si evitano conflitti tra proprietà denominate in modo simile da origini diverse, ad esempio BizTalk Server proprietà di sistema e proprietà dell'adattatore personalizzate. I valori per queste proprietà sono dell'oggetto tipo .NET, ma in realtà queste proprietà sono VARIANTs.

Ogni parte ha un contesto della parte che è anche un dizionario ma senza la nozione di uno spazio dei nomi. Il valore di un contesto della parte costituisce metadati che fanno riferimento ai dati di una parte. Di seguito è riportato un esempio della proprietà Charset che specifica il set di caratteri utilizzato per la codifica del messaggio.

Le proprietà possono essere scritte e lette dal contesto del messaggio. Possono anche essere innalzate di livello per essere utilizzate per il routing dei messaggi. Essere innalzate di livello significa che vengono scritte come una parte dei metadati che passa con il messaggio. Una proprietà innalzata di livello consente al relativo valore di essere utilizzato durante la creazione di espressioni di filtro nelle porte di trasmissione e orchestrazioni. Componenti downstream e codice utente delle orchestrazioni sono in grado di leggere proprietà innalzate di livello e anche di scrivervi nuovi valori.

Una volta rilevata la corrispondenza di una proprietà innalzata di livello con una sottoscrizione esistente e utilizzata per il routing di un messaggio, la proprietà viene abbassata di livello per evitare la corrispondenza con una sottoscrizione ciclica. Una proprietà abbassata di livello rimane nel contesto del messaggio come metadati ma perde il suo stato di promozione.

Suggerimento per l'implementazione: Le proprietà del contesto del messaggio vengono caricate in memoria in fase di esecuzione. Non è consigliabile scrivere dati di grandi dimensioni nel contesto del messaggio, perché ciò potrebbe causare un'interruzione del BizTalk Server supporto di messaggi di grandi dimensioni. Gli oggetti possono essere serializzati nel contesto del messaggio, purché implementino l'interfaccia IPersistStream . Inoltre, le proprietà innalzate di livello sono limitate a 255 caratteri.

Per creare messaggi è sempre necessario utilizzare le impostazioni predefinite del messaggio. Nel frammento di codice seguente viene illustrato come creare un nuovo messaggio BizTalk dal flusso di dati ricevuto dall'adapter:

using Microsoft.BizTalk.Message.Interop;  
  
IBaseMessage CreateMessage( Stream s, IBaseMessageFactory msgFactory )  
{  
IBaseMessage msg = null;  
IBaseMessagePart part = msgFactory.CreateMessagePart();  
part.Data = s;  
msg = msgFactory.CreateMessage();  
msg.AddPart("body", part, true);  
return msg;  
}