匯出 (0) 列印
全部展開

在 BizTalk 服務專案中將訊息從橋接器路由至目的地

更新日期: 2015年2月

連接各種 BizTalk 服務專案元件的其中一個明顯原因,是可將訊息從某個元件路由傳送至另一個元件。還有另一個需求;您可能需要根據商務邏輯,將訊息從某個來源元件路由傳送至多個目的地元件,這也可能稱為路由條件。有多個路由條件時,您也需要設定路由條件的順序。而最後,在最後將訊息路由傳送至目的地之前,有一些可對訊息執行的動作,例如,將值指派給訊息標頭、加入自訂標頭等。本主題會詳細討論這些層面,也提供如何在 BizTalk 服務專案中達成這些作業的指示。

本主題使用範例案例說明這些步驟。假設必須使用XML 單向橋接器來處理下列格式的 XML 訊息。

<PaymentHistory xmlns:ns0="http://Integration.PipelineChaining">
  <BaseData>
    <Amount>10.4</Amount> 
    <CurrencyCode>CurrencyCode_0</CurrencyCode> 
    <EntryDate>1999-05-31</EntryDate> 
    <EntryTime>13:20:00.000-05:00</EntryTime> 
    <PaymentMode>Mode_0</PaymentMode> 
    <StatusCode>StatusCode_0</StatusCode> 
    <PurposeCode>PurposeCode_0</PurposeCode> 
  </BaseData>
</PaymentHistory>

商務邏輯是如果付款模式是信用卡,則必須將訊息路由傳送至單向外部服務;如果模式是現金,則必須將訊息路由傳送至單向轉送端點;如果模式不是上述任一項,則必須將訊息路由傳送至服務匯流排佇列。

這是一項相當簡單且直接的作業。您必須定義在橋接器處理之後將內送訊息路由傳送至其中的路由目的地。有一些考量是有關可以將XML 單向橋接器或XML 要求-回覆橋接器中的訊息路由傳送至其中的位置。如需這些考量的詳細資訊,請參閱Constraints on Using an XML One-Way BridgeConstraints on Using an XML Request Reply Bridge

下列程序描述如何連接訊息流程的兩個元件。

  1. 開始使用 Visual Studio 專案中所述,建立BizTalk 服務專案。

  2. 將元件加入至 BizTalk 服務專案 (如在 Azure 上設定豐富傳訊端點下的各種主題所述)。

  3. 在 [工具箱] 的 [橋接器] 類別下,按一下 [連接器] 元件。

  4. 將滑鼠指標放到做為訊息來源的元件 (將游標移至元件時會以紅點標示) 右側。滑鼠指標會變更,以顯示小 "S" 符號,指出此元件將加入訊息的來源。在該點上按住滑鼠,並將它拖曳至目標元件左側 (游標此時會再次變更,以顯示小 "T" 來指出目標),然後放開滑鼠。現在會連接兩個元件。請注意,您可以將一個來源元件連接至多個目標元件。

    note附註
    針對目前的里程碑,訊息流程的開頭必須一律為XML 單向橋接器或XML 要求-回覆橋接器。之後,只要您遵守條件約束,就可以將訊息路由傳送至任何元件。條件約束列在Constraints on Using an XML One-Way BridgeConstraints on Using an XML Request Reply Bridge

    執行範例案例時,您必須將XML 單向橋接器連接至單向外部服務、單向轉送端點和服務匯流排佇列。

除了連接兩個元件之外,路由的另一個重要層面是根據商務邏輯,將訊息從一個來源元件路由傳送至多個目的地元件。

執行上述的範例案例時,路由條件必須根據付款模式 (由 XML 訊息中的 PaymentMode 元素表示)。若要在 BizTalk 服務專案中實作此商務邏輯,則需要對每個條件建立路由篩選。下列程序描述作法。

note附註
開始建立篩選之前,請確定您已建立所有三個連接器 (如前一個程序所述)。另外,您還必須在橋接器的 [擴充] 階段中建立屬性 (例如PaymentMode),來擷取 XML 訊息中的 PaymentMode 元素值。如需從 XML 元素擷取值的指示,請參閱To extract values from a message body using xpath

下列程序描述如何在 BizTalk 服務專案中設定路由條件。

  1. 在XML 單向橋接器與單向外部服務之間的路由連接器上按一下滑鼠右鍵,然後按一下 [屬性]。在 [屬性] 窗格的 [篩選條件] 屬性中,按一下省略符號 (…) 按鈕以開啟 [路由篩選組態] 對話方塊。

  2. 在此對話方塊中,選取 [篩選] 選項,然後指定下列篩選字串:

    PaymentMode='credit_card'
    
    note附註
    您必須使用篩選運算式的標準 SQL 92 語法。

    請注意,PaymentMode 是您必須已在 [擴充] 階段中指定擷取的屬性,以及此篩選條件 (指定於XML 單向橋接器與單向外部服務之間的連接器) 指定將訊息傳送至單向外部服務 (如果符合此篩選條件)。

    按一下 [確定] 以儲存變更並結束。

  3. 同樣地,針對XML 單向橋接器與單向轉送端點之間的連接器,將篩選字串指定為:

    PaymentMode='cash'
    
  4. 如果付款模式不是現金也不是信用卡,則應該將訊息路由傳送至服務匯流排佇列。若要在訊息流程中達成該目標,則針對XML 單向橋接器與服務匯流排佇列之間的連接器,您必須開啟 [路由篩選組態] 對話方塊,然後選取 [全部符合]。這指定如果不符合任一篩選條件,則會採用此篩選條件,並將訊息路由傳送至服務匯流排佇列。

在上節中,我們設定路由連接器的篩選,確保將正確的訊息路由傳送至訊息流程的正確元件。不過,路由順序相當重要。例如,執行前面討論的案例時,如果將 PaymentMode 設定為 credit_card 的訊息路由傳送至已設定 [全部符合] 的篩選條件,則會將它路由傳送至服務匯流排佇列,而非單向外部服務端點。因此,根據商務邏輯,應該最後採用 [全部符合] 條件。作法是設定必須採用篩選條件的順序。

  1. 在 XML 橋接器 (XML 單向橋接器或XML 要求-回覆橋接器) 上按一下滑鼠右鍵,然後選取 [屬性]。在 [屬性] 窗格中,按一下 [路由順序表] 屬性的省略符號 (…) 按鈕。

  2. [路由順序表] 對話方塊會顯示路由篩選的預設採用順序。此預設順序是路由連接器的建立順序。若要重新排序路由篩選,請選取路由篩選,然後使用向上箭號與向下箭號排列其正確順序。您必須針對所有路由篩選重複此步驟,直到有您要的正確路由順序為止。

  3. 按一下 [確定] 以儲存變更並結束。

您可能會想要加入部分自訂訊息標頭或指派標準訊息標頭的值,再將訊息傳送至訊息接收者。您可以使用路由動作來完成。如需詳細資訊,請參閱Route Action

為了繼續上面使用的範例,我們假設必須將訊息傳送至具有自訂 SOAP 標頭 (CustomerName) 和值的單向外部服務。

  1. 在橋接器與單向外部服務之間的路由連接器上按一下滑鼠右鍵,然後按一下 [屬性]。在 [屬性] 窗格的 [路由動作] 屬性中,按一下省略符號 (…) 按鈕以開啟 [路由動作] 對話方塊。

  2. 在 [路由動作] 對話方塊中,按一下 [加入] 開啟 [加入路由動作] 對話方塊。在 [加入路由動作] 對話方塊中,執行下列步驟:

     

    章節 欄位名稱 描述

    屬性 (讀取來源)

    屬性名稱

    列出在前兩個 [擴充] 階段的 XML 要求-回覆橋接器中所定義的所有屬性。在這裡選取屬性時,您會指定必須將所選取屬性的值指派給外寄訊息的相關訊息標頭。

    運算式

    使用此選項以提供運算式,而產生的值會傳遞給外寄訊息的相關訊息標頭。您也可以使用此選項,指定將指派給訊息標頭的常數值。部份運算式範例如下:

    • P1 + P2,其中 P1 和 P2 是在任何前兩個 [擴充] 階段中定義的兩個屬性

    • 'Fabrikam',是字串常數

      Important重要事項
      一定要將指定的運算式值括在單引號中。

    Important重要事項
    您可以選擇 [屬性名稱] 選項或 [運算式] 選項。這些選項互斥。

    目的地 (寫入目標)

    類型

    指定外寄訊息的訊息類型,即獲指派先前指定值的標頭。

    根據訊息目的地,下拉式清單中的可用值會變更。

    • 如果您要路由傳送至外部服務或轉送端點 (單向或雙向),則下拉式清單中的可用值是 [SOAP] 和 [HTTP]。

    • 如果您要路由傳送至佇列或主題,則下拉式清單中的可用值是 [SOAP] 和 [代理]。

    • 如果您要路由傳送至 FTP 目的地,則下拉式清單中的可用值是 [FTP]。

    • 如果您要路由傳送至 SFTP 目的地,則下拉式清單中的可用值是 [SFTP]。

    • 如果您將路由傳送至 Azure Blob,則下拉式清單中的可用值是 [Azure Blob]。

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

    指定將指派其值的自訂 SOAP 標頭命名空間。

    Important重要事項
    如果您從 [識別碼] 下拉式清單中選取標準標頭,則這個欄位將呈現灰色。您只需要針對自訂 SOAP 標頭輸入命名空間。

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

    識別碼

    指定將指派其值的訊息標頭屬性名稱。

    您也可以在此處指定自訂標頭。若為 SOAP 訊息類型,下拉式清單會列出四個標準識別碼。若為 HTTP 訊息類型,因為標準標頭清單會很龐大,所以下拉式清單不會列出任何標頭。若為 SOAP 和 HTTP 訊息類型,您可以列出要將其值指派給另一個屬性的自訂標頭。

    若為其他目的地類型 (例如 FTP、SFTP 和 Azure Blob),您可以選取必須寫入其屬性值的訊息標頭。

    執行先前採用的範例時,您必須將此項目設定為 CustomerName,因為那是您必須併入在外寄訊息中的自訂標頭名稱。

  3. 按一下 [加入路由動作] 對話方塊中的 [確定]。對話方塊現在應該如下所示:

    路由動作

    所以,這個對話方塊到底在說明什麼?這表示橋接器將使用屬性 P1 的值 (已在先前的其中一個 [擴充] 階段中定義),並將它指派給自訂 SOAP 標頭 CustomerName 與命名空間 http://schemas.microsoft.com/integration/promotedpropertiesinfo,然後將它傳送給訊息接收者。

    Important重要事項
    如果您在相同的路由連接器上建立兩個路由動作,該動作使用兩個不同屬性 (例如 P1 和 P2) 指向相同目的地,則不會收到建置錯誤。最後一個路由動作會覆寫先前定義的路由動作。在此範例中,將會採用屬性 P2 的路由動作。

  4. 若要更新或移除路由動作,您可以在對話方塊中選取它,然後分別按一下 [編輯] 或 [移除]。按一下 [路由動作] 對話方塊中的 [確定],然後按一下 [儲存] 儲存橋接器組態的變更。

另請參閱

顯示:
© 2015 Microsoft