Lektion 2: Erstellen der Initiatordatenbank

In dieser Lektion erfahren Sie, wie Sie die Initiatordatenbank und alle Service Broker-Initiatorobjekte erstellen, die in diesem Lernprogramm verwendet werden. Führen Sie diese Schritte von einer Kopie von Management Studio aus, die auf demselben Computer ausgeführt wird wie die Initiatorinstanz von Database Engine (Datenbankmodul).

Verfahrensweisen

Erstellen eines Service Broker-Endpunkts

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Führen Sie den Code anschließend aus, um einen Service Broker-Endpunkt für diese Instanz von Database Engine (Datenbankmodul) zu erstellen. Ein Service Broker-Endpunkt gibt die Netzwerkadresse an, an die Service Broker-Nachrichten gesendet werden. Dieser Endpunkt verwendet den Service Broker-Standard mit TCP-Port 4022 und gibt an, dass die Remoteinstanzen von Database Engine (Datenbankmodul) Windows Authentication-Verbindungen zum Senden von Nachrichten verwenden.

    Windows Authentication funktioniert, wenn sich beide Computer in derselben Domäne oder vertrauenswürdigen Domänen befinden. Befinden sich die Computer nicht in vertrauenswürdigen Domänen, verwenden Sie die Zertifikatssicherheit für die Endpunkte. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen von Zertifikaten für die Service Broker-Transportsicherheit (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
    

Erstellen von Initiatordatenbank, Hauptschlüssel und Benutzer

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Ändern Sie das Kennwort in der CREATE MASTER KEY-Anweisung. Führen Sie anschließend den Code aus, um die Zieldatenbank zu erstellen, die für dieses Lernprogramm verwendet wird. Standardmäßig ist bei neuen Datenbanken die ENABLE_BROKER-Option auf ON festgelegt. Außerdem erstellt der Code den Hauptschlüssel und Benutzer, die zum Unterstützen von Verschlüsselung und Remoteverbindungen verwendet werden.

    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
    

Erstellen des Initiatorzertifikats

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Ändern Sie den in der BACKUP CERTIFICATE-Anweisung angegebenen Dateinamen in einen Namen, der auf einen Ordner in Ihrem System verweist. Führen Sie anschließend den Code aus, um das Initiatorzertifikat zu erstellen, das zum Verschlüsseln von Nachrichten verwendet wird. Der Ordner, den Sie angeben, sollte über Berechtigungen verfügen, die den Zugriff von anderen Konten als Ihrem Windows-Konto und dem Windows-Konto, unter dem die Instanz von Database Engine (Datenbankmodul) ausgeführt wird, verhindern. Für Lektion 3 müssen Sie die Datei InstInitiatorCertificate.cer manuell in einen Ordner kopieren, auf den von der Zielinstanz zugegriffen werden kann.

    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
    

Erstellen der Nachrichtentypen

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Führen Sie den Code anschließend aus, um die Nachrichtentypen für die Konversation zu erstellen. Die hier angegebenen Namen und Eigenschaften der Nachrichtentypen müssen mit denen identisch sein, die Sie in der vorherigen Lektion in InstTargetDB erstellt haben.

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

Erstellen des Vertrags

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Führen Sie den Code anschließend aus, um den Vertrag für die Konversation zu erstellen. Der angegebene Vertragsname und die Eigenschaften müssen mit dem Vertrag identisch sein, den Sie in der nächsten Lektion in InstInitiatorDB erstellen.

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

Erstellen von Initiatorwarteschlange und Initiatordienst

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Führen Sie den Code anschließend aus, um die Warteschlange und den Dienst zu erstellen, die bzw. der für das Ziel verwendet wird. Die CREATE SERVICE-Anweisung verknüpft den Dienst mit InstInitiatorQueue. Daher gehen alle Nachrichten, die an den Dienst gesendet werden, in InstInitiatorQueue ein. Außerdem gibt die CREATE SERVICE-Anweisung an, dass nur Konversationen, die den zuvor erstellten //BothDB/2InstSample/SimpleContract verwenden, den Dienst als Zieldienst verwenden können.

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

Erstellen von Verweisen auf Zielobjekte

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Ändern Sie die FROM FILE-Klausel so, dass sie auf den Ordner verweist, in den Sie die InstTargetCertficate.cer-Datei aus Schritt 3 in Lektion 1 kopiert haben. Führen Sie dann den Code aus, um einen Zielbenutzer zu erstellen und das Zielzertifikat aufzurufen.

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

Erstellen von Routen

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Ändern Sie die Zeichenfolge MyTargetComputer in den Namen des Computers, der die Zielinstanz ausführt. Führen Sie anschließend den Code aus, um Routen zum Zieldienst und Initiatordienst sowie eine Remotedienstbindung zu erstellen, die den TargetUser mit der Zieldienstroute verknüpft.

    Die folgenden CREATE ROUTE-Anweisungen gehen davon aus, dass in der Zielinstanz keine doppelten Dienstnamen vorliegen. Wenn mehrere Datenbanken in der Zielinstanz Dienste mit demselben Namen enthalten, geben Sie mit der BROKER_INSTANCE-Klausel die Datenbank an, in der Sie eine Konversation eröffnen möchten.

    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
    

Nächste Schritte

Sie haben die Initiatordatenbanken, die für das Lernprogramm verwendet werden, erfolgreich erstellt. Im nächsten Schritt schließen Sie die Konfiguration der Zieldatenbank ab, indem Sie die Zielobjekte erstellen, die über Abhängigkeiten zu Initiatorobjekten verfügen. Siehe Lektion 3: Abschließen der Zielkonversationsobjekte.