匯出 (0) 列印
全部展開

XML 單向橋接器:設定要求訊息的擴充階段

更新日期: 2015年5月

顧名思義,[擴充] 階段會實現訊息擴充,方法為定義屬性,其值可透過 BizTalk 服務 所提升的預設屬性衍生自訊息標頭 (標準或自訂)、衍生自外部資料來源 (這個版本中僅支援 Microsoft Azure SQL Database 資料表),或衍生自訊息主體內的元素。這些屬性便可以用來將訊息路由傳送到目的地端點,或由訊息接收實體進行更進一步的處理。在本節中,我們將完成執行每個動作的程序,也就是:

  • 將訊息標頭值指派給屬性。請參閱

  • 使用 BizTalk 服務 所提升的預設屬性或系統屬性。

  • 查閱外部資料來源

  • 使用 Xpath 從訊息主體元素擷取值

此外,您也可以開啟或關閉 [擴充] 階段,來指定是否要執行以上任一動作。

在 [擴充] 階段中定義屬性時,有一些您必須考量的事項。

  • 您在擴充階段中指定的屬性名稱不區分大小寫。

  • 除非您儲存 橋接器組態,否則路由或回覆動作無法使用您在擴充階段中指定的屬性。如需有關路由和回覆動作的詳細資訊,請參閱Route and Send Actions: Bridging Protocol Mismatch

本節提供關於如何使用不同來源中的屬性和值 (如上文所提) 來設定擴充階段的資訊。

設定擴充階段

  1. 按兩下 XML 單向橋接器 元件開啟路線設計工具。

  2. 選取 [擴充] 階段,然後從 [屬性] 窗格將 IsEnabled 屬性設為 TrueFalse

    note附註
    如果 IsEnabled 屬性設為 True,而且尚未定義任何屬性,則不論是設定 橋接器 (設計階段) 或處理訊息 (執行階段) 時,橋接器 都不會擲回錯誤。

  3. 如果您要包含必須在訊息進入 [擴充] 階段之前執行的任何自訂程式碼,請設定 [On Enter Inspector] 屬性。同樣地,如果您要包含必須在訊息結束 [擴充] 階段之後執行的任何自訂程式碼,請設定 [On Exit Inspector] 屬性。如需有關如何設定這些屬性的詳細資訊,請參閱How to Include Custom Code in Bridges

  4. 在 [擴充] 階段中,選取 [擴充] 活動,然後在 [屬性] 窗格中按一下 [屬性定義] 屬性對應的省略符號按鈕 (…) 開啟 [屬性定義] 對話方塊。

  5. 在 [屬性定義] 對話方塊中,按一下 [加入] 開啟 [加入屬性] 對話方塊。在 [加入屬性] 對話方塊中,您可以使用各種來源中的值,並將它們納入到訊息中作為屬性。這些屬性和其值此後就能用於其他處理工作,例如根據屬性值將訊息路由遞送至不同目的地 (請參閱The Routing Action。下表列出不同來源,以及加入屬性至訊息的方法。

     

    來源 作法

    將訊息標頭值指派給屬性

    將訊息標頭值指派給屬性

    使用系統提升的屬性

    使用系統提升的屬性

    查閱外部資料來源

    查閱外部資料來源

    使用 XPath 從訊息內擷取值

    使用 xpath 從訊息主體擷取值

將訊息標頭值指派給屬性

  1. 在 [加入屬性] 對話方塊中,執行下列動作:

    note附註
    本表僅列出將標頭指派給屬性這項作業所需的欄位,而這項作業僅適用於使用訊息傳輸通訊協定 (例如 SOAP、HTTP、FTP 和 SFTP) 所傳輸的訊息。因此,僅在您從 [類型] 下拉式清單中選取 [HTTP]、[SOAP]、[FTP] 或 [SFTP] 時,下列步驟才適用。另外,根據您在 [類型] 下拉式清單選取的項目,必要欄位將加上紅框,而其餘欄位將呈現灰色。

     

    章節 欄位名稱 描述

    來源 (讀取來源)

    型別

    指定將從中擷取標頭值的訊息類型。若要將標頭值指派給屬性,可能值為 [SOAP]、[HTTP]、[FTP]、[SFTP] 和 [代理]。

    SOAP 標頭命名空間 (僅在 [類型] 設為 [SOAP] 時)

    指定自訂 SOAP 標頭的命名空間。例如,在下列摘錄中,所強調顯示的是 MessageType 自訂標頭的命名空間。

    <s:Header>
       ...
      <MessageType xmlns="http://schemas.microsoft.com/integration/2011/system-properties">http://POAttr.org#PurchaseOrderAttr</MessageType> 
       ...
    </s:Header>
    
    Important重要事項
    如果您從 [識別碼] 下拉式清單中選取標準標頭,則這個欄位將呈現灰色。您只須針對自訂 SOAP 標頭輸入命名空間;然而,這並不是必要屬性。

    如果類型設為 [HTTP]、[FTP]、[SFTP] 或 [代理],則這個欄位也會呈現灰色。

    識別碼

    指定訊息標頭屬性的名稱,而您想要擷取該屬性的值,並將此值指派給您在這個對話方塊中定義的屬性。如果我們以上面同一個摘錄為例,則識別碼將為 MessageType

    您也可以在此處指定自訂標頭。若為 FTP 和 SFTP,下拉式清單會列出標準識別碼。若為 HTTP 訊息類型,因為標準標頭清單會很龐大,所以下拉式清單不會列出任何標頭;在這樣的情況下,您可以輸入標頭的名稱。另外,若為 SOAP、HTTP 和代理訊息類型,您也可以列出要將其值指派給另一個屬性的自訂標頭。

    讓我們在這裡舉例以充分瞭解這個情況。讓我們假設 SOAP 訊息標頭看起來像下面這樣:

    <s:Header>
      ...  
      <PONumber xmlns="http://schemas.microsoft.com/integration/promotedpropertiesinfo">PO1234</PONumber> 
      ...  
    </s:Header>
    

    在這個摘錄中,PONumber 為自訂 SOAP 標頭,其值為 PO1234。因此,如果您將識別碼設為 PONumber,則值 PO1234 將指派給您在這裡定義的屬性。

    屬性 (寫入)

    屬性名稱

    指定正在定義之屬性的名稱。這個屬性的值將設為從您稍早指定的訊息標頭屬性中擷取的值。

    若要繼續使用上面的同一個範例,而您將屬性名稱設為 P1,並將 [識別碼] 設為 PONumber,則 P1 的值將設為 PO1234

    資料類型

    指定屬性的資料類型。您可以從下拉式清單中選取一值。

  2. 按一下 [加入屬性] 對話方塊中的 [確定]。對話方塊現在應該如下所示:

    屬性定義

    所以,這個螢幕擷取畫面到底在說明什麼?其表示,如果內送訊息為 SOAP 訊息,其 SOAP 標頭名稱為 PONumber,而標頭命名空間為 http://schemas.microsoft.com/integration/promotedpropertiesinfo,即會建立資料類型為 stringP1,而且標頭的值會指派給這個屬性。

  3. 若要更新/移除屬性定義,您可以在對話方塊中選取屬性定義,然後按一下 [編輯]/[移除]。按一下 [屬性定義] 對話方塊中的 [確定],然後按一下 [儲存],以將變更儲存至 橋接器組態。

使用系統提升的屬性

  1. 在 [加入屬性] 對話方塊中,執行下列動作:

    note附註
    本表僅列出將系統提升的屬性指派給訊息所需的欄位。另外,根據您在 [類型] 下拉式清單選取的項目,必要欄位將加上紅框,而其餘欄位將呈現灰色。

     

    章節 欄位名稱 描述

    來源 (讀取來源)

    型別

    若要使用系統提升的屬性,請從下拉式清單中選取 [系統]。

    識別碼

    指定系統提升之屬性的名稱,而您想要擷取該屬性的值,並將此值指派給您在這個對話方塊中定義的屬性。

    屬性 (寫入)

    屬性名稱

    指定正在定義之屬性的名稱。這個屬性的值將設為從您稍早指定的系統提升之屬性中擷取的值。

    資料類型

    指定屬性的資料類型。您可以從下拉式清單中選取一值。

查閱外部資料來源

  1. 在 [加入屬性] 對話方塊中,執行下列動作:

    note附註
    本表僅列出查閱作業所需的欄位。因此,僅在您從 [類型] 下拉式清單中選取 [查閱] 時,下列步驟才適用。另外,根據您在 [類型] 下拉式清單選取的項目,必要欄位將加上紅框,而其餘欄位將呈現灰色。

    Important重要事項
    就此版本而言,您只能從 Microsoft Azure SQL Database 資料表中查閱。

     

    章節 欄位名稱 描述

    來源 (讀取來源)

    型別

    針對搜尋作業,從下拉式清單選取 [查閱]。

    識別碼

    從下拉式清單中,選取已設定的提供者

    如果您尚未設定提供者,請執行下列步驟來設定一個:

    1. 在 [識別碼] 下拉式清單中選取 [設定新的]。

    2. 在 [提供者組態] 對話方塊中,指定下列值:

       

      欄位名稱 描述

      提供者名稱

      指定提供者的名稱

      連接字串

      指定有效的連接字串以連接到 Microsoft Azure SQL Database 資料表

      資料表名稱

      指定要從中執行資料查閱的來源 Microsoft Azure SQL Database 資料表名稱

      在資料行中查詢

      指定 Microsoft Azure SQL Database 資料表中的資料行名稱,而它的值將當做執行資料查閱的輸入查詢

      查詢輸出資料行

      指定 Microsoft Azure SQL Database 資料表中的資料行名稱,而它的值將是輸出值,最終會指派給查閱的屬性

    3. 按一下 [確定] 加入提供者組態。

    查閱屬性

    在下拉式清單中選取您已經定義的屬性。這個屬性的值將傳遞給上述提供者組態中指定的 [在資料行中查詢]。

    屬性 (寫入)

    屬性名稱

    指定將包含查閱值的屬性名稱。這個屬性的值將衍生自上述提供者組態中 [查詢輸出資料行] 的值。

    資料類型

    指定屬性的資料類型。您可以從下拉式清單中選取一值。

  2. 按一下 [加入屬性] 對話方塊中的 [確定]。對話方塊應該如下所示:

    查閱定義

    所以,這些對話方塊到底在說明什麼?這是邏輯流動的方式 (將以上述的同一個採購單範例說明):

    • 橋接器 會在資料表 (TempTable) (定義於 MyProvider 提供者組態中) 的輸入查詢資料行 (P_Order) 中查詢 P1 (PO1234) 的值。

    • 然後,橋接器 會從 TempTable 中的輸出查詢資料行 (Cust_Name) 挑選對應於 PO1234 的值。

    • 從輸出查詢資料行取得的值會指派給屬性 P2。例如,如果對應於採購單 PO1234 的客戶名稱是 John,P2 的值便設為 John。

    • 屬於 P2 的資料類型會設為 string

  3. 若要更新/移除屬性定義,您可以在對話方塊中選取屬性定義,然後按一下 [編輯]/[移除]。按一下 [屬性定義] 對話方塊中的 [確定],然後按一下 [儲存],以將變更儲存至 橋接器組態。

使用 xpath 從訊息主體擷取值

  1. 在 [加入屬性] 對話方塊中,執行下列動作:

    note附註
    本表僅列出擷取 (xpath) 作業所需的欄位。另外,根據您在 [類型] 下拉式清單選取的項目,必要欄位將加上紅框,而其餘欄位將呈現灰色。

     

    章節 欄位名稱 描述

    來源 (讀取來源)

    型別

    在下拉式清單中選取 Xpath

    識別碼

    指定要從訊息中擷取元素或屬性的 xpath 查詢。xpath 查詢通常看起來像下面這樣:

    /*[local-name()='<root_node>' and namespace-uri()='<namespace>']/*[local-name()='<node_name>' and namespace-uri()=<namespace>']/*@[local-name()='<attribute_name>' and namespace-uri()='<namespace>']
    

    訊息類型

    指定訊息的訊息類型,而您必須使用 xpath 查詢從這個訊息中擷取元素或屬性值。

    下拉式清單顯示所有您已加入至 BizTalk 服務專案 的結構描述。選取具有您要擷取之元素的結構描述。

    屬性 (寫入)

    屬性名稱

    指定正在定義之屬性的名稱。這個屬性的值將設為使用 xpath 查詢從訊息主體中擷取的值。

    資料類型

    指定屬性的資料類型。您可以從下拉式清單中選取一值。

  2. 按一下 [加入屬性] 對話方塊中的 [確定]。對話方塊應該如下所示:

    使用 Xpath 擷取

    所以,這個對話方塊到底在說明什麼?其表示,從訊息類型 (在這個範例中是 PurchaseOrder) 中,橋接器 會根據指定的 xpath 查詢從元素中擷取值、將該值指派給屬性 P3,然後將屬性 P3 的資料類型設為 double

  3. 若要更新/移除屬性定義,您可以在對話方塊中選取屬性定義,然後按一下 [編輯]/[移除]。按一下 [屬性定義] 對話方塊中的 [確定],然後按一下 [儲存],以將變更儲存至 橋接器組態。

在設計階段您可以使用 橋接器組態 設計介面,定義要提升的屬性,以及要指派給這些屬性的值。但是在執行階段,屬性提升及值指派實際上是發生訊息流程通過 服務匯流排 上部署的 橋接器 時。然而在執行階段,屬性提升有時候會由於各種原因而失敗。現在就讓我們使用下表,立即瞭解這些發生失敗的情況和時機。

 

若是發生這種情況 什麼會獲得提升

您在設計階段指定的 SOAP 或 HTTP 標頭不存在於執行階段實際傳送至 橋接器 的訊息。

您在設計階段定義的屬性未在執行階段獲得提升;不會擲回任何例外狀況。

您在設計階段指定的 XPATH 查詢未對應於執行階段傳送至 橋接器 的訊息中的元素。

您在設計階段定義的屬性未在執行階段獲得提升;不會擲回任何例外狀況。

就查閱而言,如果您在設計階段指定的查閱屬性在執行階段不存在 (因為它從未獲得提升)

由於查閱而被指派一值的屬性並未獲得提升;不會擲回任何例外狀況。

就查閱而言,如果您在設計階段指定的提供者組態 (其中包括連接字串、資料表名稱等等) 不正確

在執行階段會擲回例外狀況;不會提升任何屬性。在設計階段不會擲回任何例外狀況的原因是 橋接器組態 設計介面並不會驗證提供者組態。

Important重要事項
在設計階段只會驗證使用者認證,而且如果驗證不成功,部署就會失敗。

就查閱而言,如果您在設計階段指定的查閱屬性值,在執行階段的提供者資料來源中 (在這個情況中是 Microsoft Azure SQL Database 資料表) 沒有相符項目

擲回例外狀況;不會提升任何值

就查閱而言,如果您在設計階段指定的查閱屬性值,在執行階段的提供者資料來源中 (在這個情況中是 Microsoft Azure SQL Database 資料表) 有多個相符項目

屬性獲得提升,而且來自資料來源的相符值當中只有一個相符值會被指派給提升的屬性作為值。

就 SOAP、HTTP、XPATH 和查閱而言,如果在設計階段針對屬性指定的資料類型不同於屬性將在執行階段具有之值的資料類型

每當類型轉換可行時,即會轉換類型並提升屬性。例如,您在設計階段將屬性定義為字串,但在執行階段指派給該屬性的值為 30,則該屬性的值將為 "30" (作為字串)。

當類型轉換不可行時,即會擲回例外狀況,而且不會提升屬性。例如,您在設計階段將屬性定義為 "double",但在執行階段指派給該屬性的值為 "John"。因為 "John" 無法當作 "double" 儲存在屬性中,所以會擲回例外狀況,而且不會提升屬性。

Microsoft 正展開一份線上問卷調查,了解您對於 MSDN 網站的看法。 如果您選擇參加,您離開 MSDN 網站時即會顯示線上問卷調查。

您是否想要參加?
顯示:
© 2015 Microsoft