Leçon 2 : création de la base de données de l'initiateur
Dans cette leçon, vous allez apprendre à créer la base de données de l'initiateur et tous les objets Service Broker de l'initiateur utilisés dans ce didacticiel. Exécutez ces étapes à partir d'une copie de Management Studio exécutée sur le même ordinateur que l'instance de l'initiateur du Moteur de base de données.
Procédures
Créer un point de terminaison Service Broker
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Puis, exécutez-le pour créer un point de terminaison Service Broker pour cette instance du Moteur de base de données. Un point de terminaison Service Broker spécifie l'adresse réseau à laquelle les messages Service Broker sont envoyés. Le point de terminaison Service Broker utilise le port TCP 4022 par défaut et impose aux instances distantes du Moteur de base de données d'utiliser des connexions via l'authentification Windows pour envoyer des messages.
L'authentification Windows fonctionne lorsque les deux ordinateurs se trouvent dans le même domaine ou dans des domaines approuvés. Si les ordinateurs ne se trouvent pas dans des domaines approuvés, utilisez la sécurité des certificats pour les points de terminaison. Pour plus d'informations, consultez Procédure : créer des certificats pour la sécurité du transport 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
Créer la base de données, la clé principale et l'utilisateur de l'initiateur
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Modifiez le mot de passe de l'instruction CREATE MASTER KEY. Puis, exécutez le code pour créer la base de données de la cible utilisée dans ce didacticiel. Par défaut, l'option ENABLE_BROKER est activée dans les nouvelles bases de données. Le code crée également la clé principale et l'utilisateur qui seront utilisés pour prendre en charge le chiffrement et les connexions à distance.
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
Créer le certificat de l'initiateur
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Modifiez le nom de fichier spécifié dans l'instruction BACKUP CERTIFICATE de manière à ce qu'il fasse référence à un dossier sur votre système. Puis, exécutez le code pour créer le certificat de l'initiateur utilisé pour chiffrer les messages. Le dossier spécifié doit disposer d'autorisations qui interdisent l'accès à partir de comptes autres que votre compte Windows et le compte Windows sous lequel l'instance du Moteur de base de données s'exécute. Pour la leçon 3, vous devez copier manuellement le fichier InstInitiatorCertificate.cer dans un dossier accessible à partir de l'instance de le cible.
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
Créer les types de messages
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Puis, exécutez-le pour créer les types de messages de la conversation. Les noms et propriétés des types de messages spécifiés ici doivent être identiques à ceux créés dans InstTargetDB dans la leçon précédente.
CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage] VALIDATION = WELL_FORMED_XML; CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage] VALIDATION = WELL_FORMED_XML; GO
Créer le contrat
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Puis, exécutez-le pour créer le contrat de la conversation. Le nom et les propriétés du contrat spécifiés ici doivent être identiques à ceux du contrat que vous créerez dans InstInitiatorDB dans la leçon suivante.
CREATE CONTRACT [//BothDB/2InstSample/SimpleContract] ([//BothDB/2InstSample/RequestMessage] SENT BY INITIATOR, [//BothDB/2InstSample/ReplyMessage] SENT BY TARGET ); GO
Créer la file d'attente et le service de l'initiateur
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Puis, exécutez-le pour créer la file d'attente et le service utilisés pour la cible. L'instruction CREATE SERVICE associe le service à InstInitiatorQueue. Par conséquent, tous les messages envoyés au service sont reçus dans InstInitiatorQueue. L'instruction CREATE SERVICE spécifie également que seules les conversations qui utilisent le //BothDB/ 2InstSample/SimpleContract créé précédemment peuvent utiliser le service comme service de la cible.
CREATE QUEUE InstInitiatorQueue; CREATE SERVICE [//InstDB/2InstSample/InitiatorService] AUTHORIZATION InitiatorUser ON QUEUE InstInitiatorQueue; GO
Créer des références aux objets de la cible
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Modifiez la clause FROM FILE pour qu'elle fasse référence au dossier dans lequel vous avez copié le fichier InstTargetCertficate.cer à l'étape 3 de la leçon 1. Puis, exécutez le code pour créer un utilisateur de la cible et extraire le certificat de la cible.
CREATE USER TargetUser WITHOUT LOGIN; CREATE CERTIFICATE InstTargetCertificate AUTHORIZATION TargetUser FROM FILE = N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer' GO
Créer des itinéraires
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Attribuez à la chaîne MyTargetComputer le nom de l'ordinateur qui exécute votre instance de la cible. Puis, exécutez le code pour créer des itinéraires vers le service de la cible et le service de l'initiateur, et une liaison de service distant qui associe TargetUser à l'itinéraire du service de la cible.
Les instructions CREATE ROUTE suivantes supposent que l'instance de la cible ne contient pas de noms de service en double. Si plusieurs bases de données sur l'instance de la cible contiennent des services qui portent le même nom, utilisez la clause BROKER_INSTANCE pour spécifier la base de données sur laquelle vous souhaitez ouvrir une conversation.
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
Étapes suivantes
Vous venez de créer les bases de données de l'initiateur utilisées dans le didacticiel. Vous allez ensuite terminer de configurer la base de données de la cible en créant les objets de la cible qui ont des dépendances sur les objets de l'initiateur. Consultez Leçon 3 : exécution des objets de conversation de la cible.
Voir aussi