Messaggi BizTalk Server
BizTalk Server è, al suo centro, un motore di gestione dei messaggi. Per comprendere i dettagli di BizTalk Server, è importante comprendere i messaggi e come sono rappresentati, archiviati ed elaborati da BizTalk Server. I dettagli relativi al funzionamento dei messaggi in BizTalk Server risulteranno più semplici da capire dopo che si sarà compreso che cosa è un messaggio.
Tutti i messaggi in BizTalk Server sono considerati messaggi multiparte e sono composti da zero o più parti. Ciascun messaggio con una o più parti presenta una di queste parti identificata come parte corpo. Ciascuna parte è composta da un blocco di dati binari che può rappresentare un documento XML, un file flat, una classe .NET serializzata o altri flussi di dati binari. La parte corpo del messaggio viene utilizzata per identificare il tipo del messaggio che può essere utilizzato per il routing.
Un concetto molto importante da comprendere è che tutti i messaggi sono immutabili in BizTalk Server. il che significa che una volta costruito un messaggio, non sarà possibile modificarlo. Un messaggio viene considerato costruito dopo che è stato inserito nel database MessageBox. Eventuali modifiche al messaggio richiedono la creazione di un nuovo messaggio e il relativo utilizzo da quel momento in poi. Ciò è particolarmente evidente in Progettazione orchestrazioni, dove le regole di compilazione obbligano a seguire severe linee guida per la costruzione di un messaggio prima di utilizzarlo e non consentono di modificare il messaggio al di fuori del relativo blocco di costruzione. Se è necessario modificare il messaggio, si creerà un nuovo blocco di costruzione per la creazione di un messaggio dello stesso tipo, si copierà il messaggio originale nel nuovo messaggio e si apporteranno quindi eventuali modifiche al nuovo messaggio prima di lasciare il blocco di costruzione.
Proprietà del messaggio
Oltre alle parti che costituiscono un messaggio, ogni messaggio nel sistema dispone di un set di proprietà che vanno insieme a esso in ciò che è noto come contesto del messaggio. Tali proprietà possono essere valori estratti o correlati al messaggio stesso. Gli adapter ad esempio inseriscono le proprietà nel contesto correlato alla ricezione di un messaggio, come l'indirizzo al quale è stato ricevuto il messaggio e il tipo di adapter utilizzato per la ricezione. Le proprietà possono essere scritte nel contesto o alzate di livello nel contesto. La differenza tra queste due opzioni è che le proprietà innalzate di livello possono essere utilizzate come criteri nel routing dei messaggi, il che non è possibile per le proprietà scritte.
Il concetto di scrittura o promozione di valori nel contesto è correlato, ma non è identico, alla promozione proprietà in Editor BizTalk. In Editor BizTalk, è possibile contrassegnare un elemento o un attributo di uno schema come proprietà innalzata di livello o campo differenziante. Gli elementi contrassegnati con annotazioni PropertyField nello schema di messaggi consentono al disassembler della pipeline di inserire la proprietà Innalzata nel contesto correlato. Gli elementi contrassegnati con annotazioni DistinguishedField nello schema di messaggi consentono al disassembler della pipeline di inserire la proprietà Scritture nel contesto correlato.
La progettazione per le proprietà alzate di livello è iniziata con la progettazione della correlazione dei messaggi: la possibilità di correlare un messaggio ricevuto a un'istanza di orchestrazione già in esecuzione. Per la correlazione è necessario definire una proprietà o un set di proprietà che forniscano il collegamento tra i messaggi nell'orchestrazione. In un processo di acquisto è ad esempio necessario correlare i messaggi in base all'ID dell'ordine di acquisto. Tuttavia in molti casi il nome di uno specifico campo o attributo del messaggio può non corrispondere. Uno schema di ordine di acquisto può presentare un elemento denominato POId, mentre lo schema della relativa fattura può presentare un elemento denominato OrderID. Per correlare i messaggi su una proprietà denominata ad esempio PurchaseOrderID in questa situazione, lo sviluppatore dovrà essere in grado di astrarre il nome della proprietà da correlare dall'origine del valore. Gli schemi delle proprietà supportano l'astrazione.
Uno schema di proprietà consente di definire le proprietà alzate di livello in un percorso comune e di farvi riferimento da altri schemi. Come altri schemi, lo schema proprietà presenta uno spazio dei nomi, ma a differenza di altri schemi può contenere solo elementi definiti, vale a dire non record o attributi. Tutti gli elementi definiti nello schema proprietà hanno un nome e un tipo. Poiché è possibile che sia necessario fare riferimento allo schema proprietà da parte di più di uno schema, e poiché le informazioni nello schema proprietà devono essere disponibili per i componenti in fase di esecuzione, lo schema proprietà deve essere distribuito in BizTalk Server come tutti gli altri schemi. Oltre ai normali passaggi di distribuzione dello schema, le informazioni sulle proprietà alzate di livello vengono estratte e archiviate nella tabella bt_documentSpec nel database di gestione.
Una volta creato uno schema proprietà, elementi e attributi con lo stesso tipo (ad esempio, integer) possono essere innalzati di livello come una delle proprietà denominate nello schema proprietà.
Per completare il caso di esempio riportato sopra e definire la proprietà condivisa necessaria per la correlazione, lo sviluppatore dovrà eseguire le operazioni seguenti.
Creare uno schema proprietà e definire un elemento di tipo xs:int denominato PurchaseOrderId.
Creare uno schema PurchaseOrder e aggiungere un elemento o attributo di tipo xs:int denominato POId.
Mediante il comando Mostra promozioni dell'Editor BizTalk, lo sviluppatore aggiungerà il campo POId all'elenco di proprietà promosse e indicherà che deve essere promosso come proprietà PurchaseOrderId definita nello schema proprietà selezionando la proprietà denominata PurchaseOrderId nell'elenco.
Creare uno schema Invoice e aggiungere un elemento o attributo di tipo xs:int denominato OrderId.
Utilizzando il comando Mostra innalzamenti di livello nell'Editor BizTalk, lo sviluppatore aggiungerà il campo OrderId all'elenco di proprietà innalzate di livello e indicherà che deve essere innalzato di livello come proprietà PurchaseOrderId definita nello schema proprietà selezionando la proprietà denominata PurchaseOrderId nell'elenco.
Una volta che questa definizione esiste negli schemi documento, i componenti della pipeline possono innalzare di livello OrderId e POId come proprietà denominata PurchaseOrderID in modo che sia possibile utilizzarla per il routing e la correlazione. Per ulteriori informazioni sul processo di promozione, vedere la sezione relativa all'elaborazione del messaggio.
Uno dei vantaggi delle proprietà innalzate di livello è che il valore dell'elemento innalzato di livello è disponibile nel contesto del messaggio. Ciò significa che recuperare questo valore non comporta il caricamento del messaggio nella memoria per eseguire un'istruzione XPath sul messaggio. Per ottenere il valore è invece possibile utilizzare un semplice elenco proprietà insieme a una chiave. Questo tipo di comportamento risulta utile in situazioni diverse dal routing di messaggi e costituisce il motivo per la creazione di campi differenzianti. Mentre le proprietà innalzate di livello vengono innalzate di livello nel contesto del messaggio, i campi differenzianti vengono scritti nel contesto. A differenza delle proprietà innalzate di livello, comunque, per i campi differenzianti non esiste alcuno schema proprietà. Per questo motivo non è possibile utilizzare per il routing i campi differenzianti che non sono di conseguenza disponibili come criteri di filtro in una porta di trasmissione o in una forma di ricezione dell'orchestrazione. I campi differenzianti possono tuttavia essere utilizzati nelle orchestrazioni per leggere o scrivere valori provenienti dal contesto del messaggio anziché dovere caricare il messaggio in memoria ed estrarre il valore.
Oltre alla promozione o alla scrittura delle proprietà nel contesto del messaggio, è possibile aggiungere al contesto anche i predicati di messaggio. I predicati di messaggio sono utilizzati come misura di sicurezza in BizTalk Server e forniscono informazioni contestuali sul messaggio, richiedendo la corrispondenza dei valori specificati per eventuali host cui il messaggio dovrà essere instradato. Questa misura di sicurezza consente di configurare l'ambiente BizTalk Server in modo da consentire a specifici host di essere gli unici host in grado di ricevere ed elaborare specifici messaggi. Nella Console di amministrazione BizTalk Server, ad esempio, un host può essere configurato con l'identificazione personale di un certificato da utilizzare per la decodifica e la decrittografia dei messaggi. Se si configura questa proprietà verrà creata una proprietà dell'applicazione per l'host nel database MessageBox. I messaggi protetti ricevuti e decrittografati mediante questa identificazione personale vengono quindi solo instradati agli host con l'identificazione personale configurata.