'IBaseMessage'-Schnittstelle
Wenn ein Empfangsadapter ein eingehendes Datenpaket über sein Protokoll akzeptiert, verwendet er die IBaseMessage-Schnittstelle , um eine Nachricht zu erstellen, die an die Messaging-Engine übergeben werden soll. Alle Nachrichten werden unter Verwendung dieser Schnittstelle dargestellt.
Eine Nachricht verfügt über einen oder mehrere Nachrichtenteile, die von der IBaseMessagePart-Schnittstelle dargestellt werden. Jedes Nachrichtenteil verfügt über einen IStream-Schnittstellenzeiger über einen Verweis auf seine Daten. Der Kontext einer Nachricht wird durch die IBaseMessageContext-Schnittstelle dargestellt. In der folgenden Abbildung wird das BizTalk-Nachrichtenobjektmodell veranschaulicht.
Beim Nachrichtenkontext handelt es sich um ein Verzeichnis, das eine Kombination aus dem Namen und dem Namespace der Eigenschaft als Schlüssel enthält. Dies verhindert Kollisionen zwischen ähnlich benannten Eigenschaften aus verschiedenen Quellen, z. B. BizTalk Server Systemeigenschaften und benutzerdefinierten Adaptereigenschaften. Die Werte für diese Eigenschaften sind vom .NET-Objekt, aber tatsächlich handelt es sich bei diesen Eigenschaften um VARIANTs.
Jeder Teil verfügt über einen Teilkontext, bei dem es sich ebenfalls um ein Verzeichnis handelt, das jedoch nicht über einen Namespace verfügt. Beim Wert eines Nachrichtenteilkontexts handelt es sich um Metadaten, die auf die Daten des entsprechenden Teils verweisen. Ein Beispiel hierfür ist die Charset-Eigenschaft , die den Zeichensatz angibt, der zum Codieren der Nachricht verwendet wird.
Die Eigenschaften können vom Nachrichtenkontext aus geschrieben und gelesen werden. Sie können außerdem höher gestuft werden, um zum Weiterleiten von Nachrichten verwendet zu werden. Bei einer Höherstufung werden sie als Teil der Metadaten geschrieben, die zum Datenfluss der Nachricht gehören. Der Wert einer höher gestuften Eigenschaft kann beim Erstellen von Filterausdrücken für Sendeports und Orchestrierungen verwendet werden. Downstreamkomponenten und Benutzercode in Orchestrierungen können höher gestufte Eigenschaften lesen und neue Werte in die Eigenschaften schreiben.
Wenn eine höher gestufte Eigenschaft mit einem vorhandenen Abonnement in Übereinstimmung gebracht und zum Weiterleiten einer Nachricht verwendet wurde, wird sie herabgestuft, um zyklische Abonnementübereinstimmungen zu verhindern. Eine herabgestufte Eigenschaft verbleibt in Form von Metadaten im Nachrichtenkontext. Sie verliert jedoch ihren höher gestuften Status.
Implementierungstipp: Nachrichtenkontexteigenschaften werden zur Laufzeit in den Arbeitsspeicher geladen. Sehr große Daten sollten nicht in den Nachrichtenkontext geschrieben werden, da dies möglicherweise die BizTalk Server unterstützung großer Nachrichten unterbrechen kann. Objekte können in den Nachrichtenkontext serialisiert werden, sofern sie die IPersistStream-Schnittstelle implementieren. Höher gestufte Eigenschaften können außerdem maximal 255 Zeichen enthalten.
Zum Erstellen neuer Nachrichten sollte stets die Nachrichtenfactory verwendet werden. Im folgenden Codefragment wird veranschaulicht, wie aus dem vom Adapter empfangenen Datenstrom eine neue BizTalk-Nachricht erstellt wird.
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;
}