您可以使用表示式來動態轉換協調流程中的訊息。 XLANG 會公開轉換方法,可從訊息指派圖形內的建構訊息圖形內呼叫。 這是使用 轉換 圖形時呼叫的相同方法,但可讓您使用您在協調流程內指定的地圖,以程式設計方式轉換訊息。 當您執行與類型無關的訊息處理時,這會很有用。 例如,如果您的業務流程需要從一系列映射中選擇,以根據接收的輸入訊息所提供的參數轉換輸入訊息,您可以使用 Expression 圖形中的轉換方法來達成此目的,同時保持整體業務流程不變。
轉換訊息
您可以使用下列範例程式代碼,以程式設計方式轉換 訊息指派 圖形中的訊息:
MyMapType = typeof(MyMapName);
transform(MyOutputMsg) = MyMapType(MyInputMsg);
在此範例中,MyMapType 會宣告為協調流程中 System.Type 類型的 變數。 MyMapName 是已在 BizTalk 專案中建立的地圖名稱。 如果您想要參考位於個別 BizTalk 元件中的映射,則必須在 BizTalk 專案中參考該元件。 MyInputMsg 是來源訊息,而 MyOutputMsg 是目的地訊息。 如果您的地圖包含多個來源訊息,您可以使用下列範例程式碼來轉換訊息:
MyMapType = typeof(MyMapName);
transform(MyOutputMsg) = MyMapType(MyInputMsg1, MyInputMsg2);
備註
如果您有多個來源訊息,它們必須根據對應中所指示的輸入訊息部分編號,依序排列在表達式中。
這很重要
在 Expression 形狀中動態轉換訊息時,建議您在使用者程式碼中撰寫快取來快取已編譯的映射,然後在 Expression 形狀中使用該快取來擷取映射,並在執行訊息轉換之前進行擷取。 如果您未快取地圖,則可能會看到 Common Language Runtime (CLR) 記憶體大幅成長。 動態映射要求 .NET 運行時執行程式碼存取檢查,這會導致每個轉換的 .NET Evidence 物件被放置在大型物件堆中,而且這個物件在編排完成之前不會被處置。 因此,當許多這類轉換同時發生時,您可能會看到記憶體使用量大幅增加,這也可能導致記憶體不足例外狀況。