共用方式為


使用 BizTalk Server 透過 SQL 的 SELECT 語句和 FOR XML 子句來接收輪詢訊息

您可以使用包含 FOR XML 子句的 SELECT 語句或預存程式,設定 SQL 配接器以接收 SQL Server 數據表或檢視的定期數據變更訊息。 您可以將這些語句指定為配接器執行來輪詢資料庫的輪詢語句。 輪詢語句可以是 SELECT 語句或傳回結果集的預存程式。

如需配接器如何支援輪詢的詳細資訊,請參閱 輪詢支援。 如需輪詢作業之 SOAP 訊息結構的相關信息,請參閱 輪詢和 TypedPolling 作業的訊息架構。 SQL FOR XML 子句 會提供更多詳細數據。

備註

本主題示範如何使用 XmlPolling 輸入作業來接收輪詢訊息。 XmlPolling 作業是用來使用 SELECT 語句或包含 FOR XML 子句的預存程式來輪詢 SQL Server 資料庫。 XmlPolling 作業的訊息包含 SQL Server Management Studio 中執行 SELECT 語句或預存程式所接收的 XML 訊息。

您也可以使用配接器來接收不同類型的輪詢訊息。

這很重要

如果您想要在單一 BizTalk 應用程式中有多個輪詢作業,您必須將 InboundID 連線屬性指定為連線 URI 的一部分,使其是唯一的。 使用唯一的連線 URI,您可以建立多個接收埠來輪詢相同的資料庫,或甚至是資料庫中的相同數據表。 如需詳細資訊,請參閱 使用 BizTalk Server 從 SQL 接收多個接收埠的輪詢訊息

本主題如何展示輪詢的運作方式

在本主題中,為了示範 SQL 配接器如何支援接收數據變更訊息,我們會使用 SELECT 語句搭配 FOR XML 子句來輪詢 SQL Server 資料庫。 當您在 SQL Server Management Studio 中叫用這類語句時,輸出的格式為 xml 訊息。 若要使用這類語句來輪詢 SQL Server 資料庫,您必須具有回應 xml 訊息的架構。 SQL 配接器需要此架構以便在使用 FOR XML 子句執行 SELECT 語句後接收輪詢訊息。 因此,若要使用帶有 FOR XML 子句的 SELECT 語句來查詢 SQL Server 資料庫,您必須執行下列步驟。

  1. 使用 FOR XML 子句為 SELECT 語句產生 XML 回應訊息的架構。

  2. 建立 BizTalk 專案,並將產生的架構新增至專案。

  3. 在 BizTalk 專案中建立訊息,以接收來自 SQL Server 資料庫的 XML 回應訊息。

  4. 建立協調流程以接收來自 SQL Server 資料庫的訊息,並將其儲存至資料夾。

  5. 建置及部署 BizTalk 專案。

  6. 藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。

    這很重要

    針對輸入輪詢案例,您必須一律設定單向 WCF-Custom 或 WCF-SQL 接收埠。 輸入作業不支援雙向 WCF-Custom 或 WCF-SQL 接收埠。

  7. 啟動 BizTalk 應用程式。

產生SELECT語句之回應消息的架構

您可以透過將 xmlschema 子句與 for xml 子句一起使用,為 SELECT 語句生成回應消息的架構。 在本主題中,我們使用SELECT語句來擷取指定員工標識碼的員工詳細數據。 若要藉由執行 SELECT 語句來擷取架構,必須以下列方式撰寫 SELECT 語句:

SELECT Employee_ID ,Name ,Designation FROM Employee for xml auto, xmlschema

執行此 SELECT 語句以取得回應訊息的架構。 儲存結構描述。 您現在必須在Visual Studio中建立 BizTalk 專案,並將此架構新增至專案。 在此範例中,您可以將此架構命名為 PollingResponse.xsd

這很重要

請確定在執行SELECT語句以產生架構之後移除 xmlschema 子句。 如果您無法這麼做,當您最後透過 BizTalk 執行 SELECT 語句做為 XmlPolling 作業的一部分時,您將會在回應訊息中再次產生架構。 因此,若要以 xml 的形式取得回應消息,您必須移除 xmlschema 子句。

將架構新增至 BizTalk 專案

  1. 在 Visual Studio 中建立 BizTalk 專案。

  2. 將您為預存程式產生的回應架構新增至 BizTalk 專案。 以滑鼠右鍵按兩下方案總管中的BizTalk專案,指向[ 新增],然後按兩下 [ 現有專案]。 在 [新增現有專案] 對話框中,流覽至您儲存架構的位置,然後按兩下 [ 新增]。

  3. 在 Visual Studio 中開啟架構,並進行下列變更。

    1. 將節點新增至架構,並將現有的根節點移至這個新增的節點底下。 提供根節點的名稱。 針對本主題,請將根節點重新命名為 Root

    2. 針對 SELECT 語句產生的回應架構會參考 sqltypes.xsd。 您可以從https://go.microsoft.com/fwlink/?linkid=31850中取得 sqltypes.xsd 綱要。 將 sqltypes.xsd 架構新增至 BizTalk 專案。 如需此架構的詳細資訊,請移至:

    3. 在為 SELECT 敘述生成的架構中,將import schemaLocation的值變更為以下內容。

      import schemaLocation=”sqltypes.xsd”
      

      這樣做是因為您已經將 sqltypes.xsd 架構新增至 BizTalk 專案。

    4. 提供架構的目標命名空間。 按兩下 [<架構]> 節點,然後在 [屬性] 窗格中,在 [目標命名空間] 屬性中指定命名空間。 針對本主題,將命名空間指定為 http://ForXmlPolling/namespace

定義訊息和訊息類型

您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 一旦架構產生後,您必須從 BizTalk 專案的 Orchestration 視圖中將其連結到訊息。

針對本主題,您必須建立一則訊息,以接收來自 SQL Server 資料庫的訊息。

執行下列步驟來建立訊息,並將其連結至架構。

  1. 將協調流程新增至 BizTalk 專案。 從方案總管中,以滑鼠右鍵按兩下 BizTalk 專案名稱,指向 [ 新增],然後按兩下 [ 新增專案]。 輸入 BizTalk 協調流程的名稱,然後按兩下 [ 新增]。

  2. 如果 BizTalk 專案尚未開啟,請開啟協調流程檢視視窗。 按一下 檢視,指向 其他 Windows,然後按一下 協調流程檢視

  3. 協調流程檢視中,以滑鼠右鍵按兩下 [ 訊息],然後按兩下 [ 新增訊息]。

  4. 以滑鼠右鍵按下新建立的訊息,然後選取 [ 屬性視窗]。

  5. 屬性 窗格中,對 Message_1 執行下列動作:

    使用此 若要這樣做
    識別碼 輸入 PollingMessage
    訊息類型 從下拉式清單中展開 [架構],然後選取 [ForXMLPolling.PollingResponse],其中 ForXMLPolling 是您 BizTalk 項目的名稱。 PollingResponse 是執行 SELECT 語句所產生的回應架構名稱,如 使用 BIZTalk Server 從 SQL 使用 SELECT 語句搭配 FOR XML 子句接收輪詢訊息中所述。

設定協調流程

您必須建立 BizTalk 協調流程,才能使用 BizTalk Server 從 SQL Server 資料庫接收輪詢式數據變更訊息。 在此協調流程中,配接器會收到針對 PollingStatement 系結 屬性指定的 select 語句回應。 SELECT 語句的回應會儲存至 FILE 位置。 輪詢 SQL Server 資料庫的典型協調流程包括:

  • 接收和傳送圖形以接收 SQL Server 的訊息,並分別傳送至 FILE 埠。

  • 從 SQL Server 接收訊息的單向接收埠。

    這很重要

    針對內部輪詢案例,您必須一律設定單向接收埠。 不支援輸入操作的雙向接收埠。

  • 單向傳送埠,以將輪詢回應從 SQL Server 資料庫傳送至資料夾。

    範例編排如下所示。

    輪詢 SQL Server 資料庫的協調流程

新增訊息圖形

請確定您為每個訊息圖形指定下列屬性。 Shape 數據行中所列的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。

形狀 圖形類型 性能
接收訊息 收到 - 將 名稱 設定為 ReceiveMessage

- 將 Activate 設定為 True
儲存訊息 發送 - 將 [名稱] 設定為 SaveMessage

新增埠

請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中所列的名稱是協調流程中顯示的埠名稱。

港口 性能
SQLReceivePort - 將 標識碼 設定為 SQLReceivePort

- 將 類型 設定為 SQLReceivePortType

- 將 通訊模式 設定為 單向

- 將 通訊方向 設定為 接收
SaveMessagePort - 將 標識碼 設定為 SaveMessagePort

- 將 類型 設定為 SaveMessagePortType

- 將 通訊模式 設定為 單向

- 將 通訊方向 設定為 傳送

指定動作圖形的訊息並連線到埠

下表指定您應該設定的屬性及其值,以配置動作圖形的訊息並將其連結至埠。 Shape 數據行中所列的名稱是訊息圖形的名稱,如先前所述的協調流程所示。

形狀 性能
接收訊息 - 將 訊息 設定為 接收

- 將 作業 設定為 SQLReceivePort.XmlPolling.Request
儲存訊息 - 將 訊息 設定為 接收

- 將 作業 設定為 SaveMessagePort.XmlPolling.Request

指定這些屬性之後,訊息圖形和埠會連線,且您的協調流程已完成。

您現在必須建置 BizTalk 解決方案,並將其部署至 BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程

設定 BizTalk 應用程式

部署 BizTalk 項目之後,您稍早建立的協調流程會列在 BizTalk Server 管理控制台的 [ 協調流程 ] 窗格底下。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需逐步講解,請參閱 逐步解說:部署基本 BizTalk 應用程式

設定應用程式牽涉到:

  • 選取應用程式的主機。

  • 將您在協調流程中建立的埠對應至 BizTalk Server 管理控制台中的實體埠。 為了這次編排,您必須:

    • 定義硬碟上的路徑及對應的檔案埠,BizTalk 協調流程將在此路徑中投放從 SQL Server 資料庫來的訊息。 這些訊息將會是對您為接收埠指定的輪詢語句的回應。

    • 定義實體 WCF-Custom 或 WCF-SQL 單向接收埠。 此埠會使用您為埠指定的輪詢語句來輪詢 SQL Server 資料庫。 如需如何建立埠的詳細資訊,請參閱 手動設定SQL配接器的實體埠系結。 請確定您為接收埠指定下列系結屬性。

      這很重要

      如果您在設計時間指定系結屬性,就不需要執行此步驟。 在這種情況下,您可以藉由匯入由取用配接器服務增益集建立的繫結檔案,建立具有必要繫結屬性設置的 WCF 自訂或 WCF-SQL 接收埠。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結以使用 SQL 配接器

      綁定屬性 價值觀
      InboundOperationType 請確定您已將此設定為 XmlPolling
      PolledDataAvailableStatement 請確定您指定 SQL 語句。 針對本主題,指定:

      SELECT COUNT(*) FROM Employee
      PollingStatement 請確認在產生架構時,您提供的語句與使用BizTalk Server 自 SQL 利用 SELECT 語句結合 FOR XML 子句擷取輪詢訊息時所指定的語句相同,但不包含xmlschema子句。

      SELECT Employee_ID ,Name ,Designation FROM Employee for xml auto

      注意: 請注意,SELECT 語句不包含 xmlschema 子句。
      XmlStoredProcedureRootNodeName 指定您在為 SELECT 語句生成的回應架構中新增的根節點名稱,如為 SELECT 語句生成回應訊息的架構中所述。 針對本主題,請將此設定為 Root
      XmlStoredProcedureRootNodeNamespace 為 SELECT 語句產生的回應架構指定目標命名空間,如 為 SELECT 語句產生回應訊息的架構中所述。 針對本主題,請將此設定為 http://ForXmlPolling/namespace

      如需不同系結屬性的詳細資訊,請參閱 BizTalk Adapter for SQL Server 配接器系結屬性

      備註

      建議您在使用 SQL 配接器執行輸入作業時,設定交易隔離等級和交易逾時。 您可以藉由在設定 WCF-Custom 或 WCF-SQL 接收埠時新增服務行為來執行此動作。 如需如何新增服務行為的指示,請參閱 使用 SQL 設定交易隔離等級和交易逾時

啟動應用程式

您必須啟動 BizTalk 應用程式,才能從 SQL Server 資料庫接收訊息。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程

在這個階段,請確定:

  • 執行中 WCF-Custom 或 WCF-SQL 單向接收埠,它會使用 針對 PollingStatement 系結 屬性指定的語句輪詢 SQL Server 資料庫。

  • 從 SQL Server 接收訊息的 FILE 傳送埠正在執行中。

  • 作業的 BizTalk 協調流程正在執行中。

執行作業

執行應用程式之後,會以相同的順序執行下列一組動作:

  • 適配器會在 Employee 資料表上執行 PolledDataAvailableStatement,並判斷資料表中有記錄可供輪詢。

  • 配接器會執行輪詢語句,並從 SQL Server 資料庫接收輪詢訊息。 由於輪詢語句是由具有 FOR XML 子句的 SELECT 語句所組成,因此配接器收到的輪詢訊息類似下列內容:

    <?xml version="1.0" encoding="utf-8" ?>
    <Root xmlns="http://ForXmlPolling/namespace">
      <Employee Employee_ID="10765" Name="John" Designation="Tester" xmlns="" />
      <Employee Employee_ID="10766" Name="Sam" Designation="Manager" xmlns="" />
      .....
      .....
    </Root>
    

    請注意,輪詢訊息的接收方式與使用 xmlschema 子句執行 SELECT 語句所產生的架構相同。 另請注意,根節點和命名空間與您分別指定為 XmlStoredProcedureRootNodeNameXmlStoredProcedureRootNodeNamespace 系結屬性的值相同。

備註

SQL 配接器會繼續輪詢,直到您從 BizTalk Server 管理控制台明確停用該接收埠為止。

最佳做法

部署並設定 BizTalk 項目之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,因此您不需要為相同的協調流程建立傳送埠和接收埠。 如需系結檔案的詳細資訊,請參閱 重複使用配接器系結

另請參閱

使用 BizTalk Server 搭配 SQL 配接器 輪詢 SQL Server