Interface IBaseMessage
Lorsqu’un adaptateur de réception accepte un paquet de données entrant via son protocole, il utilise l’interface IBaseMessage pour créer un message à transmettre au moteur de messagerie. Cette interface permet de représenter tous les messages.
Un message a une ou plusieurs parties de message représentées par l’interface IBaseMessagePart . Chaque partie de message a une référence à ses données via un pointeur d’interface IStream . Le contexte d’un message est représenté par son interface IBaseMessageContext . La figure suivante illustre le modèle d'objet Message de BizTalk.
Le contexte de message est un dictionnaire codé par une combinaison du nom de la propriété et de l'espace de noms de la propriété. Cela empêche les collisions entre des propriétés nommées de même nom provenant de différentes sources, par exemple, BizTalk Server propriétés système et des propriétés d’adaptateur personnalisées. Les valeurs de ces propriétés sont de l’objet de type .NET, mais en fait ces propriétés sont des VARIANTs.
Chaque partie comporte également un contexte de partie sous la forme d'un dictionnaire, mais sans la notion d'espace de noms. La valeur d'un contexte de partie correspond aux métadonnées faisant référence aux données de cette partie. La propriété Charset qui spécifie le jeu de caractères utilisé pour l’encodage du message en est un exemple.
Les propriétés peuvent être soit écrites, soit lues dans le contexte du message. Elles peuvent également être promues et utilisées pour le routage des messages. Cela signifie qu'elles sont écrites au sein des métadonnées qui circulent avec le message. Une propriété promue permet à sa valeur d'être utilisée dans la création de filtres des expressions sur les orchestrations et les ports d'envoi. Les composants en aval et le code utilisateur des orchestrations peuvent lire les propriétés promues ainsi que leur donner de nouvelles valeurs.
Après qu'une propriété promue a été associée à un abonnement existant et utilisée pour le routage d'un message, la propriété est rétrogradée pour empêcher les correspondances cycliques d'abonnement. Une propriété rétrogradée reste dans le contexte du message en tant que métadonnée mais perd son état de propriété promue.
Conseil d’implémentation : Les propriétés de contexte de message sont chargées en mémoire au moment de l’exécution. Les données très volumineuses ne doivent pas être écrites dans le contexte du message, car cela risque d’interrompre la prise en charge des messages volumineux BizTalk Server. Les objets peuvent être sérialisés dans le contexte du message à condition qu’ils implémentent l’interface IPersistStream . D'autre part, les propriétés promues sont limitées à 255 caractères.
Il faut toujours utiliser la fabrique de messages pour créer de nouveaux messages. Le fragment de code suivant montre comment créer un nouveau message BizTalk à partir du flux de données reçu par l'adaptateur.
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;
}