Lektion 2: Erstellen der Initiatordatenbank
Neu: 15. September 2007
In dieser Lektion lernen Sie, wie Sie die Initiatordatenbank und alle Service Broker-Initiatorobjekte, die in diesem Lernprogramm verwendet werden, erstellen. Führen Sie diese Schritte mit einer Kopie von Management Studio aus, die auf dem gleichen Computer wie die Initiatorinstanz von Datenbankmodul ausgeführt wird.
Vorgehensweisen
Erstellen eines Service Broker-Endpunkts
Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, um einen Service Broker-Endpunkt für diese Instanz von Datenbankmodul zu erstellen. Ein Service Broker-Endpunkt gibt die Netzwerkadresse an, an die Service Broker-Nachrichten gesendet werden. Der Endpunkt verwendet den standardmäßigen Service Broker-TCP-Port 4022 und gibt an, dass Remoteinstanzen von Datenbankmodul Nachrichten mithilfe von Windows-Authentifizierungsverbindungen senden.
Die Windows-Authentifizierung kann verwendet werden, wenn beide Computer sich in der gleichen Domäne oder in vertrauenswürdigen Domänen befinden. Befinden sich die Computer nicht in vertrauenswürdigen Domänen, verwenden Sie 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 ein Abfrage-Editorfenster ein. Ändern Sie das Kennwort in der CREATE MASTER KEY-Anweisung. Führen Sie dann 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 aktiviert. Durch diesen Code werden auch der Hauptschlüssel und der Benutzer erstellt, die zur Unterstützung 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 ein Abfrage-Editorfenster ein. Ändern Sie den in der BACKUP CERTIFICATE-Anweisung angegebenen Dateinamen so, dass er auf einen Ordner in Ihrem System verweist. Führen Sie dann den Code aus, um das Initiatorzertifikat zu erstellen, das zum Verschlüsseln von Nachrichten verwendet wird. Der angegebene Ordner sollte Berechtigungen aufweisen, die den Zugriff von anderen Konten als Ihrem Windows-Konto oder dem Windows-Konto, unter dem die Instanz von 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 direkt 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 ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, um die Nachrichtentypen für die Konversation zu erstellen. Die hier angegebenen Namen für Nachrichtentypen und Eigenschaften müssen mit denen übereinstimmen, 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 ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, um den Vertrag für die Konversation zu erstellen. Der hier angegebene Vertragsname und die Eigenschaften müssen mit dem Vertrag übereinstimmen, den Sie in der nächsten Lektion in der InstInitiatorDB erstellen.
CREATE CONTRACT [//BothDB/ 2InstSample/SimpleContract] ([//BothDB/ 2InstSample/RequestMessage] SENT BY INITIATOR, [//BothDB/ 2InstSample/ReplyMessage] SENT BY TARGET ); GO
Erstellen von Initiatorwarteschlange und -dienst
Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, um die Warteschlange und den Dienst zu erstellen, die für das Ziel verwendet werden. Die CREATE SERVICE-Anweisung ordnet InstInitiatorQueue dem Dienst zu. Deshalb werden alle Nachrichten, die an den Dienst gesendet werden, in InstInitiatorQueue empfangen. Die CREATE SERVICE-Anweisung gibt außerdem an, dass nur Konversationen, welche den von Ihnen 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 ein Abfrage-Editorfenster ein. Ändern Sie die FROM FILE-Klausel so, dass der Ordner referenziert wird, in den Sie in Schritt 3 von Lektion 1 die InstTargetCertficate.cer-Datei 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 ein Abfrage-Editorfenster ein. Ändern Sie die Zeichenfolge MyTargetComputer auf den Namen des Computers, der die Zielinstanz ausführt. Führen Sie dann den Code aus, um Routen zum Zieldienst und Initiatordienst und eine Remotedienstbindung zu erstellen, die den TargetUser mit der Route des Zieldiensts verknüpft.
Die folgenden CREATE ROUTE-Anweisungen gehen davon aus, dass es in der Zielinstanz keine Dienstnamen doppelt gibt. Wenn mehrere Datenbanken in der Zielinstanz Dienste mit dem gleichen Namen aufweisen, geben Sie mithilfe der BROKER_INSTANCE-Klausel die Datenbank an, in der Sie eine Konversation ö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 erfolgreich die Zieldatenbanken erstellt, die für das Lernprogramm verwendet werden. Als Nächstes schließen Sie die Konfiguration der Zieldatenbank ab, indem Sie die Zielobjekte mit Abhängigkeiten zu Initiatorobjekten erstellen. Siehe Lektion 3: Abschließen der Zielkonversationsobjekte.
Siehe auch
Andere Ressourcen
BACKUP CERTIFICATE (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
CREATE DATABASE (Transact-SQL)
CREATE ENDPOINT (Transact-SQL)
CREATE MASTER KEY (Transact-SQL)
CREATE MESSAGE TYPE (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE REMOTE SERVICE BINDING (Transact-SQL)
CREATE ROUTE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
CREATE USER (Transact-SQL)
EXECUTE (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
Service Broker-Dialogsicherheit
Konversationsarchitektur
Dienstarchitektur