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

在這一課,您將學會建立本教學課程中所用的起始端資料庫以及所有起始端 Service Broker 物件。請從與 Database Engine 起始端執行個體在相同電腦上執行的 Management Studio 副本執行這些步驟。

程序

建立 Service Broker 端點

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。然後,執行此程式碼以便建立這個 Database Engine 執行個體的 Service Broker 端點。Service Broker 端點會指定要將 Service Broker 訊息傳送至其中的目標網路位址。這個端點會使用 Service Broker 預設值 TCP 通訊埠 4022,並指定 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 課:完成目標交談物件>。