共用方式為


表示為 XLANGMessage 的訊息

XLANGMessage物件代表以 XLANG 服務宣告的訊息實例。 這個物件的取得方式,是在方法引動過程中將訊息的參考傳遞為參數。 XLANGPart物件代表 XLANG 服務內訊息實例中包含的訊息元件。 藉由在接收參數類型為 XLANGPart 的方法調用中傳遞元件參考,或藉由列舉 XLANGMessage的傳遞參考,來取得這個物件。

協調流程訊息變數可能會傳遞至使用者元件,並接收為 XLANGMessage 物件。 XLANGMessage物件允許存取元件和存取訊息屬性。使用者可能會「保留」XLANGMessage,進而將其存留期延長到宣告範圍之外。 接著, XLANGMessage 可以從 方法傳回,並指派給協調流程中的訊息變數。

建構 XLANGMessage

使用資料流程建構 XLANGMessage 時,資料流程類型必須實作 IStreamFactoryMemoryStream。 下列程式碼範例示範如何建構 XLANGMessage

public class FileStreamFactory : IStreamFactory  
{  
    string _fname;  
  
    public FileStreamFactory(string fname)  
    {  
        _fname = fname;  
    }  
  
    public Stream CreateStream()  
    {  
        return new FileStream  
        (  
            _fname,  
            FileMode.Open,  
            FileAccess.Read,  
            FileShare.Read  
        );  
    }  
}  
  
public static void AssignStreamFactoryToPart(XLANGMessage msg)  
{  
    IStreamFactory sf = new FileStreamFactory( @”c:\data.xml” );  
    msg[0].LoadFrom( sf );  
}  

您有時可能會想要建立新的訊息,而不要轉換來源訊息。 您可以使用類型為System.Xml 的變數來執行此 動作。XmlDocument 和載入或建構適當的內容。 在下列範例中,XML 是使用XmlDocumentLoadXml方法從字串載入:

XmlVariable.LoadXml("<ns0:Root PONumber="047745351122111" xmlns:ns0="http://BTSHTTPSend.SimpleSchema"><MyChildRecord SubAttr1="Simple Attribute " /></ns0:Root>");  
XLANGMessage XmlMsg = XmlVariable;  
  

下列範例會使用XmlDocumentLoad方法,從檔案載入 XML:

XmlVariable.Load("C:\MyData.xml");  
XLANGMessage XmlMsg = XmlVariable;  
  

注意

如果您想要建構較大的訊息,請使用上一節所示範的其中一個串流方法,或考慮在協調流程Designer中使用轉換圖形。

使用 XLANGMessage 和 XLANGPart 時的考量

在使用者程式碼中使用 XLANGMessageXLANGPart 時,請考慮下列事項:

  • 請勿將訊息元件當做 XLANGPart 引數傳遞,或傳回 XLANGPart類型的值。 您應該傳遞 XLANGPart 做為元件的類型。 例如:

    Message String msg;  
    Class.Test(msg);  
    // or you can do the following  
    Messagetype mt  
    {  
         String part;  
    };  
    Message mt msg;  
    Class.Test(msg,part);  
    
    

    您也可以將訊息本身當做 XLANGMessage 傳遞,並使用 XLANGMessage 下標運算子來存取函式呼叫內的元件。 不過,您不應該將 XLANGPart 放在存留期超過函式呼叫存留期的集合中。 相反地,您應該將 XLANGMessage 放在集合中。 例如:

    void Test(XLANGMessage xlm)
    {
         try
         {
             XLANGPart xlp = xlm[0];
             string sval = (string)xlp.RetrieveAs(typeof(string));
         }
         finally
         {
             xlm.Dispose();
         }
    }
    
  • 請勿將協調流程參數定義為 XLANGMessageXLANGPart。 如果您要傳遞訊息,請使用訊息類型參數來傳遞訊息。 如果您要傳遞某個部分,請改為傳遞訊息,然後再使用此部分。 如果您只想要此部分值,請使用此部分類型來傳遞此部分。

  • 請勿傳回方法呼叫的 XLANGMessage 參數。 如果您傳回傳入的 XLANGMessage 參數,而且您無法在方法呼叫內的 參數上呼叫 Dispose 方法,它會直覺地違反存留期假設,也會擲回例外狀況。 透過 XLANGMessage 參數傳遞訊息至使用者程式碼時,您會將訊息參考至通常沒有參考訊息的特殊內容。 此內容的存留期間就是協調流程執行個體的存留期間。 這是因為 BizTalk Server 並不知道使用者程式碼是否會保留此訊息。

    當協調流程執行個體結束時,該執行個體中建立的任何訊息便不再有效,所以這類集合的存留期間應該小於或等於此執行個體的存留期間。 不過,如果您想要在訊息通過與協調流程實例具有相同存留期的 XLANGMessage 引數時,在迴圈中釋放訊息參考,您可以呼叫 XLANGMessage.Dispose 以釋放參考。 此外,如果在使用者程式碼方法內, XLANGMessage 參數只會在本機使用,而且參數的存留期包含在函式呼叫中,您也可以呼叫 XLANGMessage.Dispose 以釋放根內容的參考,並將對應的訊息傳回一般存留期行為。 例如:

    void Test(XLANGMessage xlm)
    {
         try
         {
            //XLANGMessage is only used locally
         }
         finally
         {
            xlm.Dispose();
         }
    }
    

    如果您將 xlm 放在集合中,則類別本身必須有 Dispose 方法來清除。 例如:

    public class A
    {
         Hashtable h = new Hashtable();
         public void Test(XLANGMessage xlm)
         {
             h[xlm] = 1;
         }
         //You can have more methods here
         public void Dispose()
         {
             foreach (XLANGMessage xlm in h.Keys)
             {
                 xlm.Dispose();
             }
         }
    }
    

    當您完成XLANGMessages集合時,會呼叫A.Dispose

另請參閱

表示為 XSD 結構描述的訊息
表示為 .NET 類別的訊息
在使用者程式碼中建構訊息