IBaseMessage インターフェイス
受信アダプターは、そのプロトコルを介して受信データ パケットを受け入れると、 IBaseMessage インターフェイスを使用して、メッセージング エンジンに渡すメッセージを作成します。 すべてのメッセージは、このインターフェイスで表現されます。
メッセージには、 IBaseMessagePart インターフェイスで表される 1 つ以上のメッセージ部分があります。 各メッセージ 部分には、 IStream インターフェイス ポインターを介してデータへの参照があります。 メッセージのコンテキストは、 その IBaseMessageContext インターフェイスによって表されます。 次の図は、BizTalk メッセージ オブジェクト モデルを示しています。
メッセージ コンテキストは、プロパティ名とプロパティの名前空間の組み合わせをキーとするディクショナリです。 これにより、システム プロパティやカスタム アダプター プロパティなど、異なるソースから類似した名前のプロパティ間の競合BizTalk Server回避できます。 これらのプロパティの値は .NET 型 オブジェクトですが、実際にはこれらのプロパティは VARIANT です。
各部分には部分コンテキストがあり、同じくディクショナリとして機能しますが、名前空間の概念はありません。 部分コンテキストの値は、その部分に対応するデータを参照するメタデータです。 この例として、メッセージのエンコードに使用される文字セットを指定する Charset プロパティがあります。
プロパティは、メッセージ コンテキストに書き込むことも、メッセージ コンテキストから読み取ることもできます。 また、昇格させてメッセージのルーティングに使用することもできます。 昇格させたプロパティは、メッセージと共に渡されるメタデータの一部として書き込まれます。 昇格させたプロパティの値は、送信ポートやオーケストレーションのフィルター式の作成に使用できます。 下流コンポーネントやオーケストレーション内のユーザー コードで、昇格させたプロパティを読み取ったり新しい値を書き込んだりできます。
昇格させたプロパティが既存のサブスクリプションと照合されてメッセージのルーティングに使用されると、サブスクリプションの照合が繰り返されないように、そのプロパティは降格されます。 降格されたプロパティはメタデータとしてメッセージ コンテキストに残りますが、昇格状態は失われます。
実装のヒント: メッセージ コンテキスト プロパティは、実行時にメモリに読み込まれます。 非常に大きなデータをメッセージ コンテキストに書き込むべきではありません。これは、大きなメッセージのサポートBizTalk Server中断する可能性があるためです。 オブジェクトは、 IPersistStream インターフェイスを実装する場合に、メッセージ コンテキストにシリアル化できます。 なお、昇格させたプロパティは 255 文字までに制限されます。
新しいメッセージの作成には、必ずメッセージ ファクトリを使用します。 次のコードは、アダプターで受信したデータ ストリームから新しい BizTalk メッセージを作成する方法を示しています。
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;
}