橋接器的用法和階段

更新日期: 2015年7月

BizTalk 服務 提供兩種橋接器 – 通過橋接器 和 XML 橋接器。XML 橋接器 又包含 XML 單向橋接器 和 XML 要求-回覆橋接器。本節提供這些 橋接器 的使用和階段相關資訊。

XML 橋接器 可用來協調和溝通兩個或多個不同系統之間的不符情況,這些系統則是藉由交換 XML 訊息進行通訊。XML 橋接器 (可能會在訊息流程中與其他 服務匯流排 實體搭配使用) 提供各種協調範例和案例,如下所示:

  • 訊息驗證:XML 橋接器 可針對 XSD 結構描述驗證傳入的 XML 訊息。驗證失敗的訊息會遭到拒絕。

  • 訊息擴充和擷取:XML 橋接器 可藉由查閱其他資料來源的資料,從而支援訊息擴充。當訊息可能需要內容資料時,如果這些資料一般來自組態存放區、外部服務或類似來源的訊息界限外部,則上述作法通常很有用。

    XML 橋接器 也能讓您擷取 XML 訊息的屬性,最終將其使用於路由。例如,在採購單訊息中可標示 Quantity 元素。接著可根據訂購的數量值路由訊息。

  • 訊息轉換:XML 橋接器 支援將訊息本體從某個 XML 結構轉換到另一個。在多個訊息對應到單一訊息的案例中,XML 橋接器 的這項功能也能用來「正規化」訊息。例如,橋接器 可能需要從不同的客戶接受不同結構描述的採購單,但它們最終會轉換成組織需要的單一採購單結構描述。

  • 位置虛擬化:XML 橋接器 提供後端服務的原始位置虛擬化。用戶端會將訊息傳送至雲端 (而非可能位於雲端或內部部署中的實際服務) 上公開的 XML 橋接器 端點。橋接器接著根據路由規則將訊息路由器後端服務。

  • 自訂處理:橋接器 提供加入自訂程式碼的選項,以納入現成 橋接器 組態未包含的處理工作。

本節提供 XML 橋接器 之不同階段的相關資訊。請注意,每個階段是選用的,並且可開啟關閉

XML 橋接器 的第一個階段是驗證階段。這會針對指定的結構描述提供 XML 訊息的 XSD 驗證。使用於驗證的結構描述是在 橋接器 的組態期間指定。單一 XML 橋接器 可接收和處理包含不同結構描述的 XML 訊息。在驗證階段,依據傳入的訊息,會挑選對應的結構描述並使用於驗證。針對結構描述驗證訊息後,驗證階段會升級訊息上的 X_PIPELINE_MESSAGETYPE 屬性。此屬性的值是結構描述的目標命名空間和根節點名稱的組合,例如,http://IntegrationServices.Schema#RootNode。若因找不到符合的結構描述或不明確匹配 (多個符合的結構描述) 而導致訊息驗證失敗,則會擲回例外。

如需如何設定驗證階段的指示,請參閱建立 XML 單向橋接器建立 XML 要求-回覆橋接器

擴充階段中,您可以建立屬性來擴充訊息,而屬性的值則可衍生自傳入訊息標頭、系統升級的屬性、傳入訊息主體中的元素或屬性,或對外部資料來源 (例如 Microsoft Azure SQL Database 資料表) 的查詢。接著可使用這些屬性將訊息路由至目的地端點及通訊協定橋接。

 

作業 描述

標頭至屬性指派

在此作業中,您可以使用訊息標頭的值,並將其指派給屬性。例如,您可以從 SOAP 標頭擷取動作,將動作指派給屬性,然後使用該屬性以進一步處理和/或路由。您可以根據訊息通訊協定 (用於將訊息傳送至橋接器) 來使用屬性。支援的通訊協定有 HTTP、SOAP、FTP 和 SFTP。下列屬性適用於這些通訊協定。

  • SOAP

    • 動作

    • MessageId

    • ReplyTo

    • 收件者

    • 自訂 SOAP 標頭

  • HTTP – 標準 HTTP 標頭

  • FTP/SFTP

    • FileName

    • ServerAddress

    • 資料夾

如需如何設定標頭進行屬性指派的指示,請參閱Create an XML BridgeXML Request-Reply Bridge : Configuring the Enrich Stage for the Response Message

使用系統升級屬性

依預設,BizTalk 服務 會在橋接器處理的訊息上升級部分屬性。這些屬性也稱為系統升級的屬性。這些屬性的值也可使用於各種處理工作,例如決定路由目的地等。可用的系統升級屬性如下:

  • RequestId - 指派給訊息的唯一要求 ID。

  • MessageReceivedTime - 表示在橋接器端點上收到訊息之時間的時間戳記。

  • SourceName - 橋接器從中接收訊息之來源的名稱 (在橋接器組態介面中定義)。

  • SourceType - 橋接器從中接收訊息之來源的類型 (在橋接器組態介面中使用)。

如需如何使用系統升級屬性的指示,請參閱Create an XML BridgeXML Request-Reply Bridge : Configuring the Enrich Stage for the Response Message

擷取

擴充階段的擷取作業是用於擷取訊息主體本身的特定元素或屬性的值,以便在訊息路由期間使用或做進一步處理。

如需如何設定擷取作業的指示,請參閱Create an XML BridgeXML Request-Reply Bridge : Configuring the Enrich Stage for the Response Message

查閱

擴充階段的查閱作業可藉由查閱及加入訊息界限外部來源的資料,從而擴充訊息。例如,可能有一家線上零售店允許使用者使用其當地貨幣下訂單,而用於處理訂單的後端服務則使用單一貨幣 (例如美元) 來處理任何訂單。在此情況下,將訊息傳送至後端服務前,必須將訂單的值從當地貨幣轉換成美元。您可以查閱提供最新匯率的另一項服務來完成這個動作。

在此版本中,擴充階段僅支援從 Microsoft Azure SQL Database 查閱資料。換言之,Microsoft Azure SQL Database 是唯一支援目前版本的查閱「提供者」。查閱提供者的相關資訊儲存於 LookupProviderConfigurations.xml,其新增至 BizTalk 服務專案。您可以在單一 .xml 檔案中定義多個提供者,以便在單一擴充階段過程中向多個 Microsoft Azure SQL Database 資料來源查閱資料。LookupProviderConfigurations.xml 檔案中的一般提供者定義類似於:

<ArrayOfLookupProviderConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/WindowsAzureServiceBus/Bridge">
  <LookupProviderConfiguration i:type="SqlTableLookupProviderConfiguration">
    <ProviderName>...</ProviderName>
    <ConnectionString>...</ConnectionString>
    <QueryInColumnName>...</QueryInColumnName>
    <QueryOutColumnName>...</QueryOutColumnName>
    <TableName>...</TableName>
  </LookupProviderConfiguration>
</ArrayOfLookupProviderConfiguration>

在以上摘錄中,請注意 LookupProviderConfiguration 元素的 type 屬性固定為 SqlTableLookupProviderConfiguration。這是因為您目前只能在 Microsoft Azure SQL Database 中查閱資料表。

從 Microsoft Azure SQL Database 查閱資料時另有一些考量因素。

  • 您只能查閱 Microsoft Azure SQL Database 資料表。

  • 必須使用金鑰-值組完成查閱。

  • 查閱只能產生一個值,該值會指派給訊息中的屬性。如果查閱產生多個值,則會將第一個值指派給屬性。

  • 您可以從多個資料來源查閱一個值,這意味可從多個 Microsoft Azure SQL Database 資料表或多個 Microsoft Azure SQL Database 中查閱。

如需如何設定查詢作業的指示,請參閱Create an XML BridgeXML Request-Reply Bridge : Configuring the Enrich Stage for the Response Message

雖然提供者的相關資訊是儲存於 LookupProviderConfigurations.xml,但會將哪些值從標頭指派給訊息屬性、擷取哪些值,以及查閱的值等相關資訊則是儲存於橋接器組態檔。建立 BizTalk 服務專案 時,LookupProviderConfigurations.xml 也會彙總至橋接器組態檔。部署 BizTalk 服務專案 時,會將此橋接器組態檔部署至 服務匯流排。

在擴充階段,您可以建立屬性並將值指派給那些屬性。但您一定會感到疑惑,到底能使用這些屬性執行哪些工作?如何使用這些屬性更輕鬆完成工作?使用屬性的方式有兩種:

  • 您可以使用屬性來設定篩選條件,以便將訊息路由至不同的目的地。如需如何達成此目標的指示,請參閱The Routing Condition

  • 您可以使用屬性來協調訊息傳送者與訊息接收者之間的通訊協定不符合狀況。例如,您有一則具備自訂標頭值的傳入 SOAP 訊息。您想要將此值做為 HTTP 訊息的自訂標頭加以傳遞,因為訊息接收者想要 REST 訊息並且不瞭解 SOAP 訊息格式。您可以使用屬性這麼做。您可以先將值從傳入訊息標頭指派給屬性 (假設是 P1),然後在將訊息傳送給接收者時,將 P1 的值指派給傳出訊息的訊息標頭。如需詳細資訊,請參閱路由和回覆動作:協調通訊協定不符的情況

在 橋接器組態 中,您在擴充階段過程中定義的屬性可在 橋接器組態 中每個階段的整個訊息流程中使用。換言之,若在擴充階段中定義屬性,則可在轉換階段期間以及針對任何對應作業使用該屬性。在擴充階段中定義的屬性也可在 橋接器組態 界限外部使用,但有一些考量事項。在我們詳細說明之前,我們必須瞭解屬性值會儲存為 服務匯流排 BrokeredMessage 類別的屬性。現在我們瞭解這個情況,且讓我們討論 橋接器組態 外部屬性的存留期。

  • 由於只有一個 服務匯流排 佇列或主題可使用 BrokeredMessage 類型的訊息,因此佇列和主題可直接使用屬性及其值 (作為金鑰-值組)。主題之後可能使用屬性,以便執行進一步處理和路由之類的工作

  • 您無法將屬性及其值傳遞至其他 橋接器組態 元件,如單向/雙向轉送端點或單向/雙向外部服務端點。若要將屬性值傳遞到這些實體,必須將屬性值指派給傳出訊息的標頭。如需詳細資訊,請參閱路由和回覆動作:協調通訊協定不符的情況

  • 在將訊息從一個 橋接器 路由至另一個 橋接器,最終路由至 服務匯流排 佇列 (假設情況) 的「鏈結」案例中,只能針對鏈結中最後一個橋接器的屬性做進一步路由或處理。此外,若要將屬性值傳遞至後續的橋接器,必須將屬性值指派給傳出訊息的標頭。接著必須在第二個橋接器中擷取這些屬性。

轉換階段如名稱所示,提供在訊息上執行結構化轉換的能力。如同管線中的其他階段,轉換階段可使用多種訊息類型,因此您可在轉換階段中使用多種轉換。系統會根據傳入訊息類型,在執行階段自動查閱所要執行的適當轉換,但前題是在設定橋接器時已設定和上傳對應的轉換。會根據傳入訊息的訊息類型發生轉換解析。

  • 轉換階段會將訊息的訊息類型,與對應中來源結構描述的訊息類型做比對。

  • 如果關閉驗證階段,轉換階段會比對傳入訊息與來源訊息結構描述。如果發生解析,接著會在訊息上升級 MessageType 屬性。

目前的版本僅支援單一來源至單一目的地轉換。如需詳細資訊,請參閱了解並建立訊息對應和轉換。如需如何設定轉換階段的指示,請參閱Create an XML BridgeXML Request-Reply Bridge : Configuring the Enrich Stage for the Response Message

轉換後的擴充階段類似於轉換前的擴充階段。唯一的差異是您可在轉換後的擴充階段中擴充轉換的訊息。此擴充階段的設定方式仍與轉換前擴充階段的設定方式相同。如需如何設定擴充階段的指示,請參閱Create an XML BridgeXML Request-Reply Bridge : Configuring the Enrich Stage for the Response Message

note附註
也可以在轉換的訊息上使用轉換階段前所擷取或查閱的所有屬性。若是在轉換後擴充階段中修改,則將覆寫先前擷取或擴充的屬性。

在上一節中,我們看到在驗證階段會針對結構描述進行驗證;並且在轉換階段使用轉換來轉換訊息。因此,XML 橋接器 過程中的可用成品為:

  • 結構描述。它們有 .XSD 副檔名

  • 轉換。它們有 .TRFM 副檔名,且在一個轉換階段中可有多個轉換。

  • 組件。它們包含可在橋接器的特定階段納入的自訂處理邏輯。

  • 憑證。它們使用於安全傳輸訊息。

note附註
橋接器組態檔不是成品,因為它無法在不同的橋接器之間共用。一個橋接器組態檔僅專屬於一個橋接器。

BizTalk 服務應用程式可具備多個 橋接器,每個 橋接器 則可使用多個轉換和結構描述。因此,一個普通的 BizTalk 服務 應用程式將具有大量的轉換和結構描述。不過,每個 XML 橋接器 可能不會同時需要每個轉換和結構描述。因此,必須有一種方法可將轉換和結構描述關聯至某個橋接器。您可以在設定橋接器時建立此關聯。

若要建立結構描述和轉換的關聯,請參閱建立 XML 單向橋接器建立 XML 要求-回覆橋接器

若要橋接器處理任何訊息類型,您需要使用 通過橋接器。因此,通過橋接器 不包含驗證或轉換階段,因為這兩個階段與訊息類型相關。通過橋接器 僅包含擴充階段,其用途與在 XML 橋接器 中的用途相同。如需如何設定 通過橋接器 的詳細資訊,請參閱建立通過橋接器

另請參閱

顯示: