共用方式為


使用 BizTalk Server 在 SQL Server 上執行複合作業

SQL 配接器可讓配接器用戶端在 SQL Server 資料庫上執行複合作業。 複合運算可以包括:

  • 插入、更新和刪除作業。 複合作業中不支援選取作業。

  • 作為操作執行的預存程序。

    單一複合作業可以有任意數目的這些作業,依任何順序排列。 例如,您可以有兩個插入操作,接著是刪除操作,最後則是執行預存程序。 此外,您可以讓不同的作業以不同的資料庫數據表或檢視為目標。 如需配接器如何支援複合作業的詳細資訊,請參閱使用 SQL 配接器 在 SQL Server 中執行複合作業。 如需複合作業之 SOAP 訊息結構的相關信息,請參閱 複合作業的訊息架構

備註

在開發應用程式之前,如果您要在具有使用者自訂類型之資料行的資料表或檢視上執行操作,請務必先參閱 使用 SQL 配接器進行的 User-Defined 類型資料表和檢視操作

如何在 SQL Server 上執行複合作業

搭配 BizTalk Server 使用 SQL 配接器在 SQL Server 上執行作業牽涉到 建置組塊中所述的程式性工作,以使用 SQL 配接器開發 BizTalk 應用程式。 若要在 SQL Server 資料庫上執行複合作業,這些工作如下:

  1. 建立 BizTalk 專案,並為您想要叫用的所有作業產生架構。

  2. 手動建立架構檔案,其中包含您在上一個步驟中產生之所有架構的參考。

  3. 在 BizTalk 專案中建立訊息,以從 SQL Server 資料庫傳送和接收訊息。 這些訊息必須符合您在上一個步驟中建立的要求和響應架構。

  4. 建立協調流程以在 SQL Server 資料庫上叫用複合作業。

  5. 建置及部署 BizTalk 專案。

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

  7. 啟動 BizTalk 應用程式。

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

以本主題為基礎的範例

根據本主題,BizTalk 配接器套件中提供了一個名為 CompositeOperations 的範例。 如需詳細資訊,請參閱 SQL 配接器的範例

產生架構

在本主題中,為了示範如何執行複合作業,將會依指定的順序執行下列工作:

  • 將記錄插入EMPLOYEE數據表。

  • 叫用GET_LAST_EMP_DATA預存程式,擷取最後一筆插入記錄的所有數據行。

  • 從 EMPLOYEE 資料表中刪除記錄。

    執行範例所提供的腳本,以建立 EMPLOYEE 數據表。 如需範例的詳細資訊,請參閱 架構範例

    您必須建立 BizTalk 專案,並使用取用配接器服務外掛來產生這些作業的結構描述。 如需如何產生架構的詳細資訊,請參閱 使用 SQL 配接器在 Visual Studio 中擷取 SQL Server 作業的元數據

建立複合架構定義

您現在必須建立復合架構,以參考您為個別作業建立的架構。 執行下列步驟來建立複合架構定義。

新增複合結構定義

  1. 將架構檔案新增至 BizTalk 專案。 以滑鼠右鍵按兩下項目名稱,指向 [ 新增],然後按兩下[ 新增專案]。 在 [ 新增專案 ] 對話框中,從 [ 類別 ] 方塊中,按兩下 [架構檔案]。 從 範本 方塊,按一下 架構。 指定架構檔案的名稱,然後按兩下 [ 確定]。

    在這裡範例中,將架構檔名指定為 CompositeSchema.xsd

  2. 為您希望執行的不同操作新增生成架構的引用。 在此範例中,針對作業所產生的不同架構如下:

    • TableOperation.dbo.Employee.xsd,用於 Insert 和 Delete 作業。

    • Procedure.dbo.xsd,用於GET_LAST_EMP_DATA預存程式。

      若要新增參考:

    1. 以滑鼠右鍵按一下 CompositeSchema.xsd 中的根 <架構> 節點,然後按一下 [ 屬性]。

    2. 在 [屬性] 方塊中,按一下 [匯入] 屬性的省略號按鈕 (...)

      匯入架構定義

    3. 匯入對話框中,從匯入新的架構為列表中,選取XSD 匯入,然後按一下新增

    4. [BizTalk 類型選擇器 ] 對話方塊中,展開 [BizTalk 項目名稱] 節點、展開 [ 架構],然後選取您要匯入的架構。 在此範例中,選取 <BizTalk_project_name.TableOperation_dbo_Employee>。 按一下 [確定]

      重複此步驟來匯入<BizTalk_project_name>及 Procedure_dbo。

    5. 在 [ 匯入] 對話框中,按兩下 [ 確定]。

  3. 將兩個子節點新增至根架構節點。 一個子節點對應至執行複合作業的要求架構。 另一個子節點會對應至回應架構。 對應至要求架構的節點可以具有任何名稱。 對應至回應架構的節點必須呼叫 <request_schema_node>Response。 在此範例中,我們會將要求架構節點呼叫為 Request。 因此,回應架構節點稱為 RequestResponse

    備註

    根據預設, 節點也會新增至新的架構檔案。 您可以將 節點重新命名為 [要求]。 若要重新命名節點,請以滑鼠右鍵按下節點名稱,然後按下 [ 重新命名]。

    若要在<架構>節點下新增一個節點:

    1. <滑鼠右鍵按兩下 [架構]> 節點,指向 [ 插入架構節點],然後按兩下 [ 子記錄]。

    2. 將新節點重新命名為 RequestResponse

  4. 要求節點下新增子節點,以對應您將作為復合作業一部分執行的每個作業的請求架構。 在此範例中,您必須新增與下列項目對應的子節點:

    • 在 EMPLOYEE 資料表上進行插入和刪除操作。

    • GET_LAST_EMP_DATA預存程式。

    這很重要

    您必須以您要執行作業的相同順序新增節點。 例如,如果您想要插入記錄,然後執行預存程式,然後刪除記錄,您必須先新增插入作業的節點,後面接著預存程式的節點,最後是 Delete 作業的節點。

    若要將子節點新增至 要求 節點:

    1. 以滑鼠右鍵按兩下 [要求 ] 節點,指向 [ 插入架構節點],然後按兩下 [ 子記錄]。

      58992131-13a6-45c3-9513-5c0995091fae為一個架構插入子節點

    2. 將記錄重新命名,使其與您在複合集成作業中執行的操作所需的請求架構相對應。 例如,將節點重新命名為 「Insert」。

    3. 插入 節點對應到 EMPLOYEE 資料表的插入操作請求架構。 若要這樣做,請以滑鼠右鍵按兩下 [插入 ] 節點,然後按下 [ 屬性]。 在 [屬性] 方塊中,從 [數據結構類型] 清單中,選取 [插入] [參考]。

      將子節點對應至要求架構

    4. 重複這些步驟,為GET_LAST_EMP_DATA預存程式和 Delete 作業新增要求架構的節點。 指定節點名稱,並將其對應至下表所述的對應架構。

      節點名稱 對應至架構
      GET_LAST_EMP_DATA GET_LAST_EMP_DATA (參考)
      刪除 刪除(參考)
  5. RequestResponse 節點底下新增子節點,以對應至您將作為複合作業一部分執行之每個作業的回應架構。 在此範例中,您必須新增下列項目的對應子節點:

    • 在 EMPLOYEE 資料表上進行插入和刪除操作。

    • GET_LAST_EMP_DATA預存程式。

    這很重要

    您必須以與 要求 節點下子節點相同的順序新增子節點。

    若要將子節點新增至 RequestResponse 節點:

    1. 以滑鼠右鍵按兩下 RequestResponse 節點,指向 [插入架構節點],然後按兩下 [ 子記錄]。

    2. 將記錄重新命名為符合您在複合作業中的操作的響應架構。 例如,將節點重新命名為 「InsertResponse」。

    3. InsertResponse 節點對應至 EMPLOYEE 數據表上 Insert 作業的響應架構。 若要這樣做,請以滑鼠右鍵按兩下 InsertResponse 節點,然後按兩下 [ 屬性]。 在 [屬性] 方塊中,從 [數據結構類型] 清單中,選取 [InsertResponse][參考]。

    4. 重複這些步驟,為GET_LAST_EMP_DATA預存程式和 Delete 作業的回應架構新增節點。 指定節點名稱,並將其對應至下表所述的對應架構。

      節點名稱 對應至架構
      GET_LAST_EMP_DATAResponse GET_LAST_EMP_DATAResponse (參考)
      DeleteResponse DeleteResponse (參考)
  6. 儲存 CompositeSchema.xsd 檔案。

定義訊息和訊息類型

您在最後一個步驟中建立的複合架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您現在必須建立協調流程的訊息,並將其連結至您在上一個步驟中建立的架構。

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

  2. 如果 BizTalk 專案尚未開啟,請開啟 BizTalk 專案的 [協調流程檢視] 視窗。 若要這樣做,請按一下 [檢視],指向 [其他 Windows],然後按一下 [編排檢視]。

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

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

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

    使用此 若要這樣做
    識別碼 類型 Request
    訊息類型 從下拉式清單中,展開 [架構],然後選取 [CompositeOp.CompositeSchema.Request],其中 CompositeOp 是 BizTalk 項目的名稱。 CompositeSchema 是您針對複合作業手動建立的架構。
  6. 重複步驟 2 以建立新的訊息。 在新訊息的 [ 屬性 ] 窗格中,執行下列動作:

    使用此 若要這樣做
    識別碼 類型 Response
    訊息類型 從下拉式清單中展開 Schemas,然後選取 CompositeOp.CompositeSchema.RequestResponse

設定協調流程

您必須建立 BizTalk 協調流程,才能使用 BizTalk Server 在 SQL Server 上執行復合作業。 在此協調流程中,您會在定義的接收位置放置要求訊息。 要求訊息必須符合您稍早建立的復合架構。 SQL 配接器會取用此訊息,並將其傳遞至 SQL Server。 SQL Server 的回應會儲存至另一個位置。 您必須包含傳送和接收圖形,才能將訊息分別傳送至 SQL Server 和接收回應。 執行複合作業的基本協調流程如下所示:

執行複合作業的協調

新增訊息圖形

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

形狀 圖形類型 性能
接收訊息 收到 - 將 名稱 設定為 ReceiveMessage
- 將 Activate 設定為 True
發送訊息 發送 - 將 [名稱] 設定為 SendMessage
接收回應 收到 - 將 [名稱] 設定為 ReceiveResponse
- 將 Activate 設定為 False
SendResponse 發送 - 將 [名稱] 設定為 SendResponse

新增埠

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

港口 性能
MessageIn - 將 標識碼 設定為 MessageIn
- 將 類型 設定為 MessageInType
- 將 通訊模式 設定為 單向
- 將 通訊方向 設定為 接收
LOBPort - 將 識別碼 設定為 LOBPort
- 將 [類型 ] 設定為 LOBPortType
- 將 通訊模式 設定為 要求-回應
- 將 通訊方向 設定為 傳送接收
ResponseOut - 將 標識碼 設定為 ResponseOut
- 將 類型 設定為 ResponseOutType
- 將 通訊模式 設定為 單向
- 將 通訊方向 設定為 傳送

設定動作圖形的訊息,並將其連接到端口

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

形狀 性能
接收訊息 - 將 訊息 設定為 要求
- 將 作業 設定為 MessageIn.CompositeOp.Request
發送訊息 - 將 訊息 設定為 要求
- 將 作業 設定為 LOBPort.CompositeOp.Request
接收回應 - 將 訊息 設定為 回應
- 將 作業 設定為 LOBPort.CompositeOp.Response
SendResponse - 將 訊息 設定為 回應
- 將 作業 設定為 ResponseOut.CompositeOp.Request

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

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

設定 BizTalk 應用程式

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

設定應用程式牽涉到:

  • 選取應用程式的主機。

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

    • 確定硬碟上的一個位置以及相應的檔案埠址,在該處您將放置要求訊息。 BizTalk 協調流程會取用要求訊息,並將它傳送至 SQL Server 資料庫。

    • 請定義一個硬碟上的位置和相應的檔案埠,BizTalk 協調流程會在此位置將包含 SQL Server 資料庫回應的回應訊息存放。

    • 定義實體 WCF-Custom 或 WCF-SQL 傳送埠,以將訊息傳送至 SQL Server 資料庫。 由於做為複合作業一部分的作業是在單一交易中執行,因此請確定 UseAmbientTransaction 系結屬性設定為 True

      您也必須在傳送埠中指定動作。 復合作業的動作是 「CompositeOperation」。。 如需如何建立埠的詳細資訊,請參閱 手動設定SQL配接器的實體埠系結。 如需如何指定埠動作的詳細資訊,請參閱 設定 SQL 配接器的 SOAP 動作

      備註

      使用「取用配接器服務 BizTalk 專案附加元件」生成架構時,也會建立系結檔案,其中包含關於這些埠和要在其上設定的動作的信息。 您可以從 BizTalk Server 管理主控台匯入此系結檔案,以建立傳送埠(用於輸出通話)或接收埠(用於輸入通話)。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結以使用 SQL 配接器。 如果您匯入此系結檔案,則 WCF-Custom 或 WCF-SQL 傳送埠上的動作會被設定為一個與您在產生架構時於取用配接器服務增益集中選取的所有作業相關的動態動作。 對於複合運算,您必須將動態操作取代為「CompositeOperation」。

啟動應用程式

您必須啟動 BizTalk 應用程式,才能在 SQL Server 資料庫上執行複合作業。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程

在這個階段,請確定:

  • 要接收編排要求訊息的 FILE 接收埠正在運行。

  • 從協調流程接收回應訊息的 FILE 傳送埠正在執行中。

  • WCF-Custom 或 WCF-SQL 傳送埠用於將訊息傳送至 SQL Server 資料庫正在運行。

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

執行作業

執行應用程式之後,您必須將要求訊息放入 FILE 接收位置。 要求訊息的架構必須符合您稍早建立之複合作業的架構。 例如,在 EMPLOYEE 資料表中插入記錄的要求訊息、叫用GET_LAST_EMP_DATA預存程式,以及從 EMPLOYEE 資料表刪除記錄為:

<Request xmlns="http://CompositeTest.CompositeSchema">  
  <Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
    <Rows>  
      <Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">  
        <Name>John</Name>  
        <Designation>Manager</Designation>  
        <Salary>100000</Salary>  
      </Employee>  
    </Rows>  
  </Insert>  
  <GET_LAST_EMP_DATA xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo" />  
  <Delete xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
    <Rows>  
      <Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">  
        <Name>John</Name>  
      </Employee>  
    </Rows>  
  </Delete>  
</Request>  

如需使用 SQL 配接器在 SQL Server 資料庫上執行複合作業之要求訊息架構的詳細資訊,請參閱 複合作業 的訊息架構。

協調流程會取用訊息,並將其傳送至 SQL Server 資料庫。 來自 SQL Server 資料庫的回應會儲存在定義為協調流程一部分的其他 FILE 位置。 例如,上述要求訊息的 SQL Server 資料庫回應為:

<?xml version="1.0" encoding="utf-8" ?>   
<RequestResponse xmlns="http://CompositeTest.CompositeSchema">  
  <InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
    <InsertResult>  
      <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10080</long>   
    </InsertResult>  
  </InsertResponse>  
  <GET_LAST_EMP_DATAResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo">  
    <GET_LAST_EMP_DATAResult>  
      <DataSet xmlns="http://schemas.datacontract.org/2004/07/System.Data">  
        <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
          <xs:element msdata:IsDataSet="true" name="NewDataSet">  
            <xs:complexType>  
              <xs:sequence>  
                <xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">  
                  <xs:complexType>  
                    <xs:sequence>  
                      <xs:element minOccurs="0" name="Employee_ID" type="xs:int" />   
                      <xs:element minOccurs="0" name="Name" type="xs:string" />   
                      <xs:element minOccurs="0" name="DOJ" type="xs:dateTime" />   
                      <xs:element minOccurs="0" name="Designation" type="xs:string" />   
                      <xs:element minOccurs="0" name="Job_Description" type="xs:string" />   
                      <xs:element minOccurs="0" name="Photo" type="xs:base64Binary" />   
                      <xs:element minOccurs="0" name="Rating" type="xs:string" />   
                      <xs:element minOccurs="0" name="Salary" type="xs:decimal" />   
                      <xs:element minOccurs="0" name="Last_Modified" type="xs:base64Binary" />   
                    </xs:sequence>  
                  </xs:complexType>  
                </xs:element>  
              </xs:sequence>  
            </xs:complexType>  
          </xs:element>  
        </xs:schema>  
        <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">  
          <NewDataSet xmlns="">  
            <NewTable>  
              <Employee_ID>10080</Employee_ID>   
              <Name>John</Name>   
              <Designation>Manager</Designation>   
              <Salary>100000.00</Salary>   
              <Last_Modified>AAAAAAAAF40=</Last_Modified>   
            </NewTable>  
          </NewDataSet>  
        </diffgr:diffgram>  
      </DataSet>  
    </GET_LAST_EMP_DATAResult>  
    <ReturnValue>0</ReturnValue>   
  </GET_LAST_EMP_DATAResponse>  
  <DeleteResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
    <DeleteResult>1</DeleteResult>   
  </DeleteResponse>  
</RequestResponse>  

上述回應包含多個結果集,對應為複合作業一部分執行的不同作業。 例如, InsertResult 元素包含 10080,這是新加入記錄的唯一標識碼。

最佳做法

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

另請參閱

使用 SQL 配接器開發 BizTalk 應用程式