使用 SELECT 語句與 FOR XML 子句從 SQL 使用 BizTalk Server 接收輪詢訊息
您可以使用包含 FOR XML 子句的 SELECT 語句或預存程式,設定 SQL 配接器來接收SQL Server資料表或檢視的定期資料變更訊息。 您可以將這些語句指定為配接器執行以輪詢資料庫的輪詢語句。 輪詢語句可以是 SELECT 語句或傳回結果集的預存程式。
如需配接器如何支援輪詢的詳細資訊,請參閱 輪詢支援。 如需輪詢作業之 SOAP 訊息結構的相關資訊,請參閱 輪詢和 TypedPolling 作業的訊息架構。 SQL FOR XML 子句 提供更多詳細資料。
注意
本主題示範如何使用 XmlPolling 輸入作業來接收輪詢訊息。 XmlPolling作業可用來使用包含 FOR XML 子句的 SELECT 語句或預存程式輪詢SQL Server資料庫。 XmlPolling作業的訊息包含透過執行 SELECT 語句或在 SQL Server Management Studio 中預存程式所接收的 xml 訊息。
您也可以使用配接器來接收不同類型的輪詢訊息。
- 如果您想要取得弱型別輪詢訊息,則必須使用輪詢作業。 如需詳細資訊,請參閱使用 BizTalk Server 從SQL Server接收輪詢型資料變更的訊息。
- 如果您想要取得強型別輪詢訊息,您必須使用 TypedPolling 作業。 您也必須使用 TypedPolling 作業,在單一 BizTalk 應用程式中有多個輪詢作業。 如需如何執行TypedPolling作業的指示,請參閱使用 BizTalk Server 從 SQL Server 接收強型別輪詢型資料變更訊息。
重要
如果您想要在單一 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資料庫,您必須執行下列一組工作。
使用 FOR XML 子句為 SELECT 語句產生 XML 回應訊息的架構。
建立 BizTalk 專案,並將產生的架構新增至專案。
在 BizTalk 專案中建立訊息,以接收來自SQL Server資料庫的 XML 回應訊息。
建立協調流程以接收來自SQL Server資料庫的訊息,並將其儲存至資料夾。
建置和部署 BizTalk 專案。
藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。
重要
針對輸入輪詢案例,您必須一律設定單向 WCF-Custom 或 WCF-SQL 接收埠。 輸入作業不支援雙向 WCF-Custom 或 WCF-SQL 接收埠。
啟動 BizTalk 應用程式。
產生 SELECT 語句之回應訊息的架構
您可以透過包含 xmlschema
子句與 子句的 子句,為 SELECT 語句產生回應訊息的 for xml
架構。 在本主題中,我們會使用 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 專案
在 Visual Studio 中建立 BizTalk 專案。
將您為預存程式產生的回應架構新增至 BizTalk 專案。 以滑鼠右鍵按一下方案總管中的 BizTalk 專案,指向 [新增],然後按一下 [現有專案]。 在 [新增現有專案] 對話方塊中,流覽至您儲存架構的位置,然後按一下 [ 新增]。
在 Visual Studio 中開啟架構,並進行下列變更。
將節點新增至架構,並在這個新增的節點下移動現有的根節點。 為根節點指定名稱。 針對本主題,請將根節點重新命名為 Root。
針對 SELECT 語句產生的回應架構會參考 sqltypes.xsd。 您可以從 取得 sqltypes.xsd 架構 https://go.microsoft.com/fwlink/?linkid=31850 。 將 sqltypes.xsd 架構新增至 BizTalk 專案。 如需此架構的詳細資訊,請移至:
在針對 SELECT 語句產生的架構中,將 的值
import schemaLocation
變更為下列專案。import schemaLocation=”sqltypes.xsd”
這樣做是因為您已經將 sqltypes.xsd 架構新增至 BizTalk 專案。
提供架構的目標命名空間。 按一下 [< 架構 >] 節點,然後在 [屬性] 窗格中,在[目標命名空間] 屬性中指定命名空間。 針對本主題,請將 命名空間指定為
http://ForXmlPolling/namespace
。
定義訊息和訊息類型
您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 產生架構之後,您必須從 BizTalk 專案的協調流程檢視將它連結到訊息。
針對本主題,您必須建立一則訊息,以接收來自SQL Server資料庫的訊息。
執行下列步驟來建立訊息,並將其連結至架構。
建立訊息並連結至架構
將協調流程新增至 BizTalk 專案。 從方案總管中,以滑鼠右鍵按一下 BizTalk 專案名稱,指向 [新增],然後按一下 [新增專案]。 輸入 BizTalk 協調流程的名稱,然後按一下 [ 新增]。
如果 BizTalk 專案尚未開啟,請開啟協調流程檢視視窗。 按一下 [ 檢視],指向 [其他 Windows],然後按一下 [ 協調流程檢視]。
在 [ 協調流程檢視]中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。
以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。
在Message_1的 [屬性]窗格中,執行下列動作:
使用 作法 識別碼 輸入 PollingMessage。 訊息類型 從下拉式清單中展開 [ 架構],然後選取 [ForXMLPolling.PollingResponse],其中 ForXMLPolling 是您 BizTalk 專案的名稱。 PollingResponse是透過執行 SELECT 語句所產生的回應架構名稱,如使用 SELECT 語句與 SQL 的 FOR XML 子句接收輪詢訊息中所述,使用 BizTalk Server。
設定協調流程
您必須建立 BizTalk 協調流程,以使用BizTalk Server從SQL Server資料庫接收輪詢型資料變更訊息。 在此協調流程中,配接器會接收 針對 PollingStatement 系結屬性指定的 select 語句回應。 SELECT 語句的回應會儲存至 FILE 位置。 輪詢SQL Server資料庫的一般協調流程會包含:
接收和傳送圖形以接收來自SQL Server的訊息,並分別傳送至 FILE 埠。
單向接收埠,可從SQL Server接收訊息。
重要
針對輸入輪詢案例,您必須一律設定單向接收埠。 輸入作業不支援雙向接收埠。
單向傳送埠,將輪詢回應從SQL Server資料庫傳送至資料夾。
範例協調流程如下所示。
新增訊息圖形
請確定您為每個訊息圖形指定下列屬性。 Shape 資料行中列出的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。
圖形 | 圖形類型 | 屬性 |
---|---|---|
ReceiveMessage | 接收 | - 將 [名稱 ] 設定為 ReceiveMessage - 將 Activate 設定為 True |
SaveMessage | 傳送 | - 將 [名稱 ] 設定為 SaveMessage |
新增埠
請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中列出的名稱是協調流程中顯示的埠名稱。
連接埠 | 屬性 |
---|---|
SQLReceivePort | - 將 識別碼 設定為 SQLReceivePort - 將 類型 設定為 SQLReceivePortType - 將 通訊模式 設定為 單向 - 將 通訊方向 設定為 接收 |
SaveMessagePort | - 將 識別碼 設定為 SaveMessagePort - 將 類型 設定為 SaveMessagePortType - 將 通訊模式 設定為 單向 - 設定要傳送的通訊方向 |
指定動作圖形的訊息並連接到埠
下表指定屬性及其值,您應該設定為指定動作圖形的訊息,以及將訊息連結至埠。 Shape 資料行中列出的名稱是訊息圖形的名稱,如先前所述的協調流程所示。
圖形 | 屬性 |
---|---|
ReceiveMessage | - 設定要接收的訊息 - 將 作業 設定為 SQLReceivePort.XmlPolling.Request |
SaveMessage | - 設定要接收的訊息 - 將 作業 設定為 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 配接器。
Binding 屬性 值 InboundOperationType 請務必將此設定為 XmlPolling。 PolledDataAvailableStatement 請確定您指定 SQL 語句。 針對本主題,指定:
SELECT COUNT(*) FROM Employee
PollingStatement 請務必提供與不使用 xmlschema
子句相同的語句,而您在產生架構時所指定的語句,如使用 SELECT 語句搭配 SQL 的 FOR XML 子句從 SQL 接收輪詢訊息中所述,BizTalk Server。
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 語句所產生的相同架構中接收。 另請注意,根節點和命名空間與您分別指定為 XmlStoredProcedureRootNodeName 和 XmlStoredProcedureRootNodeNamespace 系結屬性的值相同。
注意
SQL 配接器會繼續輪詢,直到您從 BizTalk Server 管理主控台明確停用接收埠為止。
最佳做法
部署並設定 BizTalk 專案之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,因此您不需要為相同的協調流程建立傳送埠和接收埠。 如需系結檔案的詳細資訊,請參閱 重複使用配接器系結。