第 2 課:建立起始端資料庫

適用于:SQL Server (所有支援的版本) Azure SQL 受控執行個體

在這一課,您將瞭解如何建立啟動器資料庫,以及本教學課程中使用的所有啟動器 Service Broker 物件。 從與 Database Engine 啟動器實例相同的電腦上執行的 Management Studio 複本執行這些步驟。

程序

建立 Service Broker 端點

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 然後,執行它來為此 Database Engine 實例建立 Service Broker 端點。 Service Broker 端點會指定要傳送 Service Broker 訊息的網路位址。 此端點使用 TCP 埠 4022 的 Service Broker 預設值,並指定 Database Engine 的遠端實例將使用 Windows 驗證連線來傳送訊息。

    當這兩部電腦都位於相同的網域或受信任網域時,Windows 驗證就會運作。 如果這些電腦不在受信任網域中,請使用端點的憑證安全性。 如需詳細資訊,請參閱 如何:建立 Service Broker 傳輸安全性的憑證 (Transact-SQL)

        USE master;
        GO
        IF EXISTS (SELECT * FROM sys.endpoints
                   WHERE name = N'InstInitiatorEndpoint')
             DROP ENDPOINT InstInitiatorEndpoint;
        GO
        CREATE ENDPOINT InstInitiatorEndpoint
        STATE = STARTED
        AS TCP ( LISTENER_PORT = 4022 )
        FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
        GO
    

建立起始端資料庫、主要金鑰和使用者

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 變更 CREATE MASTER KEY 陳述式上的密碼。 然後,執行此程式碼以便建立用於本教學課程的目標資料庫。 根據預設,新的資料庫會將 ENABLE_BROKER 選項設定為開啟。 此外,這個程式碼也會建立用來支援加密和遠端連接的主要金鑰和使用者。

        USE master;
        GO
        IF EXISTS (SELECT * FROM sys.databases
                   WHERE name = N'InstInitiatorDB')
             DROP DATABASE InstInitiatorDB;
        GO
        CREATE DATABASE InstInitiatorDB;
        GO
        USE InstInitiatorDB;
        GO
    
        CREATE MASTER KEY
               ENCRYPTION BY PASSWORD = N'<EnterStrongPassword2Here>';
        GO
        CREATE USER InitiatorUser WITHOUT LOGIN;
        GO
    

建立起始端憑證

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 將 BACKUP CERTIFICATE 陳述式中指定的檔案名稱變更為參考您系統上的資料夾。 然後,執行此程式碼以便建立用來加密訊息的起始端憑證。 您指定的資料夾應該具有許可權,以防止從 Windows 帳戶以外的帳戶存取,以及執行 Database Engine 實例所在的 Windows 帳戶。 針對第 3 課,您必須手動將 InstInitiatorCertificate.cer 檔案複製到可從目標實例存取的資料夾。

        CREATE CERTIFICATE InstInitiatorCertificate
             AUTHORIZATION InitiatorUser
             WITH SUBJECT = N'Initiator Certificate',
                  EXPIRY_DATE = N'12/31/2010';
    
        BACKUP CERTIFICATE InstInitiatorCertificate
          TO FILE =
        N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer';
        GO
    

建立訊息類型

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 然後,執行此程式碼以便建立交談的訊息類型。 這裡指定的訊息類型名稱和屬性必須與上一課在 InstTargetDB 中建立的訊息類型名稱和屬性相同。

        CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage]
               VALIDATION = WELL_FORMED_XML;
        CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
               VALIDATION = WELL_FORMED_XML;
        GO
    

建立合約

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 然後,執行此程式碼以便建立交談的合約。 此處指定的合約名稱和屬性必須與您將在下一課于 InstInitiatorDB 中建立的合約相同。

        CREATE CONTRACT [//BothDB/2InstSample/SimpleContract]
              ([//BothDB/2InstSample/RequestMessage]
                 SENT BY INITIATOR,
               [//BothDB/2InstSample/ReplyMessage]
                 SENT BY TARGET
              );
        GO
    

建立起始端佇列和服務

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 然後,執行此程式碼以便建立用於目標的佇列和服務。 CREATE SERVICE 語句會將服務與 InstInitiatorQueue產生關聯。 因此,傳送至服務的所有訊息都會接收到 InstInitiatorQueue。 CREATE SERVICE 也指定只有使用 //BothDB/ 2InstSample/SimpleContract 的交談,先前建立的交談可以使用服務作為目標服務。

        CREATE QUEUE InstInitiatorQueue;
    
        CREATE SERVICE [//InstDB/2InstSample/InitiatorService]
               AUTHORIZATION InitiatorUser
               ON QUEUE InstInitiatorQueue;
        GO
    

建立目標物件的參考

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 變更 FROM FILE 子句,以參考從第 1 課的步驟 3 複製 InstTargetCertficate.cer 檔案的資料夾。 然後,執行此程式碼以便建立目標使用者並納入目標憑證。

        CREATE USER TargetUser WITHOUT LOGIN;
    
        CREATE CERTIFICATE InstTargetCertificate
           AUTHORIZATION TargetUser
           FROM FILE =
        N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer'
        GO
    

建立路由

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。 將字串 MyTargetComputer 變更為執行目標實例的電腦名稱稱。 然後,執行程式碼以建立目標服務和啟動器服務的路由,以及將 TargetUser 與目標服務路由建立關聯的遠端服務系結。

    下列 CREATE ROUTE 陳述式會假設目標執行個體中沒有任何重複的服務名稱。 如果目標執行個體上的多個資料庫包含具有相同名稱的服務,請使用 BROKER_INSTANCE 子句來指定您想要開啟交談的資料庫。

        DECLARE @Cmd NVARCHAR(4000);
    
        SET @Cmd = N'USE InstInitiatorDB;
        CREATE ROUTE InstTargetRoute
        WITH SERVICE_NAME =
               N''//TgtDB/2InstSample/TargetService'',
             ADDRESS = N''TCP://MyTargetComputer:4022'';';
    
        EXEC (@Cmd);
    
        SET @Cmd = N'USE msdb
        CREATE ROUTE InstInitiatorRoute
        WITH SERVICE_NAME =
               N''//InstDB/2InstSample/InitiatorService'',
             ADDRESS = N''LOCAL''';
    
        EXEC (@Cmd);
        GO
        CREATE REMOTE SERVICE BINDING TargetBinding
              TO SERVICE
                 N'//TgtDB/2InstSample/TargetService'
              WITH USER = TargetUser;
    
        GO
    

後續步驟

您已成功建立將用於本教學課程的起始端資料庫。 在下一課,您將透過建立對於起始端物件具有相依性的目標物件,完成目標資料庫的設定。 如需詳細資訊,請參閱 第 3 課:完成目標交談物件

另請參閱