共用方式為


使用 BizTalk Server 從 SQL Server 接收強類型輪詢型數據變更訊息

您可以將 SQL 配接器設定為從 SQL Server 接收強類型的輪詢訊息。 您可以指定配接器執行的輪詢指令,用於輪詢資料庫。 輪詢語句可以是 SELECT 語句或傳回結果集的預存程式。

在想要將輪詢訊息中的元素對應至任何其他架構的案例中,您必須使用強型別輪詢。 您想要對應至的架構可能是 SQL Server 上的另一個操作。 例如,您可以將輪詢訊息中的特定元素對應至另一個數據表上 Insert 作業的架構。 因此,輪詢訊息中的值會做為 Insert 作業的參數。 在更簡單的情境中,您可以將強類型的輪詢訊息結構對應到僅儲存資訊的結構檔案。

這很重要

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

如需了解配接器對強型別輪詢的支援方式詳情,請參閱支援輪詢。 如需有關強型別輪詢訊息架構的詳細資訊,請參閱 輪詢和 TypedPolling 作業的訊息架構

本主題如何示範強型別輪詢

本主題示範如何使用強類型輪詢將輪詢訊息對應至另一個結構。 本主題說明如何建立 BizTalk 專案,併產生 TypedPolling 作業的 架構。 在產生 TypedPolling 作業的架構之前,您必須執行下列動作:

  • 您必須將 InboundID 指定為連線 URI 的一部分。

  • 您必須為 PollingStatement 系結屬性指定一個輪詢語句。

    在輪詢陳述中,執行下列作業:

  • 從 Employee 資料表中選取所有數據列。

  • 執行預存程式 (MOVE_EMP_DATA),將所有記錄從 Employee 數據表移至 EmployeeHistory 資料表。

  • 執行預存程式 (ADD_EMP_DETAILS) 將新記錄新增至 Employee 資料表。 此程式會採用員工名稱、指定和薪資作為參數。

    若要執行這些作業,您必須為 PollingStatement 綁定屬性指定下列項目:

SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000   

因為您為 TypedPolling 作業產生架構,因此該架構具有強類型,並包含在輪詢訊息中將會包括的所有元素。

作為相同 BizTalk 專案的一部分,您可以新增另一個架構檔案,例如 EmployeeDetails.xsd。 EmployeeDetails.xsd 的架構如下所示:

<?xml version="1.0" encoding="utf-16" ?>   
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://Typed_Polling.EmployeeDetails" elementFormDefault="qualified" targetNamespace="http://Typed_Polling.EmployeeDetails" xmlns:xs="http://www.w3.org/2001/XMLSchema">  
  <xs:element name="EmployeeDetails">  
    <xs:complexType>  
      <xs:sequence>  
        <xs:element name="Employee_Info" type="xs:string" />   
        <xs:element name="Employee_Profile" type="xs:string" />   
        <xs:element name="Employee_Performance" type="xs:string" />   
      </xs:sequence>  
    </xs:complexType>  
  </xs:element>  
</xs:schema>  

您也可以將 BizTalk Mapper 新增至專案,以將 Employee 數據表中的項目對應至 EmployeeDetails.xsd 架構中的元素(以輪詢訊息的形式接收)。 作為對應的一部分,您將輪詢訊息中的一或多個元素結合起來,並將其映射到 EmployeeDetails 架構中的一個單一元素。 您可以使用 字串串連 功能元來執行此動作。

最後,作為 BizTalk 專案的一部分,符合 EmployeeDetails.xsd 架構的檔案會放入檔案傳送埠。

使用 SQL 配接器繫結屬性設定類型化輪詢

下表摘要說明您用來設定配接器以接收數據變更訊息的SQL 配接器系結屬性。 除了 PollingStatement 系結 屬性以外,本節中所列的所有其他系結屬性在 BizTalk Server 管理控制台中設定接收埠時是必要的。 您必須先指定 PollingStatement 系結 屬性,才能產生 TypedPolling 作業的架構。

備註

針對具類型的輪詢,您必須在產生架構時指定 PollingStatement 投標屬性。 您也可以選擇在產生架構時指定其他系結屬性,即使它們並非必要也一樣。 如果您指定繫結屬性,則 Consume Adapter Service 附加元件 在產生中繼資料時生成的連接埠繫結檔案也會包含您為繫結屬性指定的值。 您稍後可以在 BizTalk Server 管理控制台中匯入此系結檔案,以建立已設定系結屬性的 WCF 自定義或 WCF-SQL 接收埠。 如需使用系結檔案建立埠的詳細資訊,請參閱 使用埠系結檔案設定實體埠系結以使用 SQL 配接器

綁定屬性 說明
InboundOperationType 指定您要執行 輪詢類型化輪詢通知 輸入作業。 預設為 輪詢。 若要接收強型別輪詢訊息,請將此設定為 TypedPolling
PolledDataAvailableStatement 指定配接器執行的 SQL 語句,以判斷是否有任何數據可供輪詢。 SQL 語句必須傳回包含數據列和數據行的結果集。 只有當數據列可用時,才會執行針對 PollingStatement系結 屬性指定的SQL語句。
PollingIntervalInSeconds 指定 SQL 配接器執行 PolledDataAvailableStatement 系結屬性 指定語句的間隔時間,以秒為單位。 預設值為30秒。 輪詢間隔會決定連續輪詢之間的時間間隔。 如果語句是在指定的間隔內執行,配接器會等候間隔中的剩餘時間。
PollingStatement 指定要查詢 SQL Server 資料庫資料表的 SQL 語句。 您可以為輪詢語句指定簡單的 SELECT 語句或預存程式。 預設值為 null。 您必須指定 PollingStatement 的值,才能啟用輪詢。 只有在有數據可供輪詢時,才會執行輪詢語句,這是 由 PolledDataAvailableStatement 系結 屬性所決定。 您可以指定以分號分隔的任意數目 SQL 語句。

重要: 針對 TypedPolling,您必須先指定這個系結屬性,才能產生元數據。
PollWhileDataFound 指定如果正在輪詢的數據表中有數據可用,SQL 配接器是否忽略輪詢間隔,並持續執行針對 PolledDataAvailableStatement 系結 屬性指定的 SQL 語句。 如果數據表中沒有可用的數據,配接器會還原為在指定的輪詢間隔執行 SQL 語句。 預設值為 false

如需這些屬性的更完整描述,請參閱 閱讀 BizTalk Adapter for SQL Server 配接器系結屬性。 為了完整了解如何使用 SQL 配接器來輪詢 SQL Server,請閱讀下文。

如何從 SQL Server 資料庫接收強型別的資料變更訊息

搭配 BizTalk Server 使用 SQL 配接器在 SQL Server 資料庫上執行作業牽涉到 建置組塊中所述的程式性工作,以使用 SQL 配接器開發 BizTalk 應用程式。 若要配置配接器以接收強類型的資料變更訊息,需執行以下工作:

  1. 建立 BizTalk 專案,然後產生 TypedPolling 作業的架構。 您必須在產生架構時指定 InboundID 連接屬性和 PollingStatement 系結 屬性。 例如,具有指定輸入識別碼的連線 URI 如下所示:

    mssql://mysqlserver//mysqldatabase?InboundID=mydatabaseId  
    
  2. 在 BizTalk 專案中建立訊息,以接收來自 SQL Server 資料庫的訊息。

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

  4. 在 BizTalk 專案中新增架構,例如 EmployeeDetails.xsd。

  5. 新增 BizTalk 對應程式,將輪詢訊息的架構對應至 EmployeeDetails.xsd 架構。

  6. 建置及部署 BizTalk 專案。

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

    這很重要

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

  8. 啟動 BizTalk 應用程式。

    本主題提供執行這些工作的指示。

以本主題為基礎的範例

在 BizTalk 配接器套件中,提供了一個與此主題相關的範例,名為 TypedPolling。 如需詳細資訊,請參閱 SQL 配接器的範例

產生架構

您必須產生 TypedPolling 作業的架構。 如需如何產生架構的詳細資訊,請參閱 使用 SQL 配接器在 Visual Studio 中擷取 SQL Server 作業的元數據 。 產生架構時,請執行下列工作。

  1. 指定連線 URI 時,請指定 InboundID 連線屬性。 針對本主題,您可以將 InboundID 指定為 Employee。 如需連線 URI 的詳細資訊,請參閱 建立 SQL Server 連線 URI

  2. 指定 PollingStatement 系結 屬性的值。 如需此系結屬性的詳細資訊,請參閱 BizTalk Adapter for SQL Server 配接器系結屬性

    如需如何指定系結屬性的指示,請參閱 設定 SQL 配接器的系結屬性

  3. 選擇合約類型為服務(輸入作業)

  4. 產生 TypedPolling 作業的架構。

定義訊息和訊息類型

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

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

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

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

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

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

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

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

    使用此 若要這樣做
    識別碼 輸入 PollingMessage
    訊息類型 從下拉選單中,展開 Schemas,然後選取 Typed_Polling.TypedPolling_Employee.TypedPolling,其中 Typed_Polling 是您的 BizTalk 專案的名稱。 TypedPolling_Employee 是針對 TypedPolling 作業所產生的架構。

設定協調流程

您必須建立 BizTalk 協調流程,才能使用 BizTalk Server 從 SQL Server 資料庫接收輪詢式數據變更訊息。 在這個協調過程中,配接器會接收與特定輪詢語句相關的輪詢消息。 BizTalk 對應程式接著會將輪詢訊息架構對應至 EmployeeDetails.xsd 架構。 然後,對應的訊息會儲存至 FILE 位置。 從 SQL Server 資料庫接收強型別輪詢訊息的標準協調流程會包括:

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

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

    這很重要

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

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

  • BizTalk 映射工具,用來將輪詢訊息的架構映射到任何其他架構。

    範例編排如下所示。

    強型別輪詢的協調流程

新增訊息圖形

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

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

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

新增埠

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

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

- 將 類型 設定為 SQLReceivePortType

- 將 通訊模式 設定為 單向

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

- 將 類型 設定為 SaveMessagePortType

- 將 通訊模式 設定為 單向

- 將 通訊方向 設定為 傳送

輸入動作圖形的訊息並連線到埠

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

形狀 性能
接收訊息 訊息 設定為 PollingMessage

作業 設定為 SQLReceivePort.TypedPolling.Request
儲存訊息 訊息 設定為 PollingMessage

作業 設定為 SaveMessagePort.TypedPolling.Request

指定這些屬性之後,訊息圖形和埠會連接。

新增 BizTalk 映射工具

您必須將 BizTalk Mapper 新增到協調流程中,將輪詢訊息架構對應到 EmployeeDetails.xsd 架構。 在 BizTalk Server 管理控制台中,您將使用此 Mapper 將輪詢訊息的架構對應至 EmployeeDetails.xsd 架構。

  1. 將 BizTalk 映射工具新增至 BizTalk 專案。 以滑鼠右鍵單擊 BizTalk 專案,指向 [ 新增],然後單擊 [ 新增項目]。

    新增項目 對話框中,從左窗格中選取 對應檔案。 從右窗格中,選取 地圖。 指定地圖的名稱,例如 MapSchema.btm。 按下 新增

  2. 從 [來源架構] 窗格中,按兩下 [ 開放原始碼架構]。

  3. [BizTalk 類型選擇器 ] 對話方塊中,展開專案名稱、展開 [架構],然後選取輪詢訊息的架構。 針對本主題,選取 Typed_Polling.TypedPolling_Employee。 按一下 [確定]

  4. 在 [ 來源架構的根節點] 對話框中,選取 [TypedPolling],然後按兩下 [ 確定]。

  5. 從 [目的地架構] 窗格中,按兩下 [ 開啟目的地架構]。

  6. [BizTalk 類型選擇器 ] 對話方塊中,展開專案名稱、展開 [架構],然後選取 EmployeeDetails 的架構。 針對本主題,選取 Typed_Polling.EmployeeDetails。 按一下 [確定]

  7. 在輪詢訊息的來源結構描述中,展開 TypedPollingResultSet0 節點和後續節點,以查看輪詢訊息中傳回的元素。 在目的地架構中,展開 EmployeeDetails 節點以查看架構中的不同元素。 針對本主題,您必須以這種方式對應資料架構:

    • 來源 架構中的Employee_ID和 名稱 必須對應至目的地架構中的 Employee_Info

    • 來源架構中的指定Job_Description必須對應至目的地架構中的Employee_Profile

    • 來源架構中的評等薪資必須對應至目的地架構中的Employee_Performance

      若要結合來源架構中的多個節點,並將其對應至目的地架構中的單一節點,您必須使用 字串串連運算質UI 指引和開發人員 API 命名空間參考中的詳細數據。

  8. 要使用 String 串接功能單元,請執行以下操作:

    1. 工具箱中拖動字串連接功能並將它放在 Mapper 格子上。

    2. 將來源架構中的 Employee_IDName 元素連接到功能元。

    3. 將函數工具連接至目的地架構中的Employee_Info元素。

    4. 針對您想要對應的所有元素重複這些步驟。 完成的地圖會類似下列內容:

      對應強型別輪詢架構

    5. 儲存地圖。

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

設定 BizTalk 應用程式

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

設定應用程式牽涉到:

  • 選取應用程式的主機。

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

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

      這很重要

      請務必將 InboundID 指定為連線 URI 的一部分。 輸入標識碼必須與您在產生架構時所指定的識別碼相同。

      這很重要

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

      綁定屬性 價值觀
      InboundOperationType 請確定您已將此設定為 TypedPolling
      PolledDataAvailableStatement 請確定您在產生架構時指定了相同的 SQL 語句,也就是:

      SELECT COUNT(*) FROM Employee
      PollingStatement 請確保您在生成架構時提供的輪詢語句與您先前指定的相同,即:

      SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000

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

      備註

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

    • 定義一個 FILE 傳送埠,適配器將在此放置訊息。 此傳送埠也將在協調流程中使用您建立的映射,以將輪詢訊息轉換成符合 EmployeeDetails.xsd 架構的訊息。 執行下列步驟來設定 FILE 傳送埠以使用對映。

      1. 建立 FILE 傳送埠。

      2. 從 [傳送埠屬性] 對話框的左窗格中,按一下 [ 出站對應]。 從右窗格中,點選 地圖 欄底下的欄位,然後從下拉式清單中選取 MapSchema。 按一下 [確定]

        在 FILE 傳送埠 上設定輸出對應

啟動應用程式

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

在這個階段,請確定:

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

  • FILE 傳送埠正在執行中,該傳送埠會將輪詢訊息對應到 EmployeeDetails 架構。

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

執行作業

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

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

  • 配接器會執行輪詢指令。 因為輪詢語句是由 SELECT 語句和預存程式所組成,因此配接器會一個接一個地執行所有語句。

    • 配接器會先執行 SELECT 語句,以傳回 Employee 數據表中的所有記錄。

    • 接著,配接器會執行MOVE_EMP_DATA預存程式,將所有的數據從 Employee 數據表移至 EmployeeHistory 數據表。 這個預存程式不會傳回任何值。

    • 接著,配接器會執行ADD_EMP_DETAILS預存程式,將一筆記錄新增至 Employee 數據表。 這個預存程式會傳回插入記錄的員工標識碼。

      執行輪詢語句並接收訊息之後,輪詢訊息就會傳送至 FILE 傳送埠。 在這裡,傳送埠上設定的輸出對應 (MapSchema)會將輪詢訊息映射至 EmployeeDetails 架構,並將訊息放置到檔案位置。 訊息如下所示:

    <?xml version="1.0" encoding="utf-8" ?>   
    <EmployeeDetails xmlns="http://Typed_Polling.EmployeeDetails">  
      <Employee_Info>10751John</Employee_Info>   
      <Employee_Profile>TesterManagesTesting</Employee_Profile>   
      <Employee_Performance>100000</EmployeePerformance>  
    </EmployeeDetails>  
    

    在上述回應中,您可以注意到Employee_Info元素包含員工標識碼 (10751) 和員工名稱 (John) 的組合。 其他元素也包含在您作為協調流程一部分所創建的映射器中設定的組合。

備註

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

最佳做法

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

另請參閱

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