次の方法で共有


ユーザーコード内のメッセージ参照

メッセージが構築されると、メッセージの表現は MessageBox データベース内にあり、別の表現はコンピューター上のメモリ内にあります。 メッセージ参照を .NET オブジェクトまたは外部アセンブリに渡してメッセージを割り当て、.NET オブジェクトまたは外部アセンブリがコンピューター上のメモリ内の表現を変更する場合、BizTalk オーケストレーション エンジンは変更を認識しません。

さらに、オーケストレーション エンジンは、MessageBox データベース内の表現にあるメッセージ パーツ データを無効にしません。 メッセージ 部分データには、次の表現モードがあります。

  • XmlDocument の表現

  • オブジェクト表現

  • ストリーム表現

  • アンダーライングパートの表現

    メッセージ 部分データをメモリ内でどのように表すかは、メッセージの構築方法と、型が .NET クラスか XML スキーマ定義言語 (XSD) スキーマかによって異なります。 ただし、UnderlyingPart 表現は常に、MessageBox データベースを指すストリームです。 メッセージが MessageBox データベースにコミットされた後、BizTalk Server のメッセージは不変であるため、オーケストレーション エンジンはメッセージ ボックス データベースの表現を使用してメッセージ パーツ データを参照します。

既にコミットされているメッセージからパーツを割り当てる場合、構築されたメッセージは MessageBox データベースに既に表現されている可能性があります。

たとえば、次のコードは、MessageBox データベースの表現から UnderlyingPart データを送信します。

// In this example, assume m1 is committed to the MessageBox  
Construct m2 {   
               m2 = m1; // m2’s part data representation is the UnderlyingPart data of m1  
               m2(myContextProperty) = “123”; // m2’s part data representation is still the UnderlyingPart data of m1  
               A.test(m2.part); // orchestration engine does not invalidate the UnderlyingPart MessageBox representation  
             }  
Send(p.o, m2);  

上記のユーザー コードを使用する代わりに、次のようなコードを使用して、XmlDocument ドキュメントを Message XLANG 変数に返すことができます。

Void A.test(ref XmlDocument xd) {…}  
XmlDocument B.test(XmlDocument xd) {…}  
construct m2 {  
               m2 = m1;  
               m2(myContextProperty) = “123”; // m2’s part data representation is the UnderlyingPart data of m1  
               A.test(ref m2.part); // orchestration engine has enough information to know it has to invalidate the UnderlyingPart MessageBox representation  
               // or  
               m2.part = B.test(m2.part); // orchestration engine has enough information to know it has to invalidate the UnderlyingPart MessageBox representation  
             }