IBaseMessage 介面
當接收配接器透過其通訊協定接受傳入的資料封包時,它會使用 IBaseMessage 介面來建立訊息以傳遞至傳訊引擎。 所有訊息都是使用此介面來代表。
訊息具有 IBaseMessagePart 介面所代表的一或多個訊息部分。 每個訊息元件都會透過 IStream 介面指標參考其資料。 訊息的內容是由其 IBaseMessageCoNtext 介面表示。 下圖說明 BizTalk 訊息物件模型。
訊息內容是以屬性名稱與屬性命名空間的組合為索引鍵的字典。 這可防止來自不同來源的類似具名屬性之間發生衝突,例如,BizTalk Server系統屬性和自訂配接器屬性。 這些屬性的值是 .NET 類型 物件,但事實上這些屬性是 VNET。
每個部分都有同時也是字典的部分內容,但是沒有命名空間的概念。 部分內容的值是用來參考該部分之資料的中繼資料。 其中一個範例是 Charset 屬性,指定用來編碼訊息的字元集。
您可以在訊息內容中寫入或讀取屬性, 也可以將這些屬性升級到可用於訊息路由。 屬性得到升級,即表示可以將它們當做與訊息一起流動之中繼資料的一部分來寫入。 如果是升級屬性,您就可以在傳送埠和協調流程上使用其值來建立篩選條件運算式。 協調流程中的下游元件和使用者程式碼可以讀取升級屬性,也可以將新值寫入其中。
在升級屬性符合現有訂閱,並用於路由傳送訊息之後,便會降級該屬性以避免發生循環的訂閱相符情況。 降級屬性將做為中繼資料保留在訊息內容裡,但會失去其升級狀態。
實作提示: 訊息內容屬性會在執行時間載入記憶體中。 非常大型的資料不應該寫入訊息內容,因為這可能會中斷BizTalk Server大型訊息支援。 物件可以序列化為訊息內容,以提供它們實作 IPersistStream 介面。 此外,升級屬性還有 255 個字元的限制。
您應該永遠使用訊息 Factory 來建立新訊息。 下列程式碼片斷說明如何從接收自配接器的資料流中建立新的 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;
}