Leçon 2 : Création de la base de données initiatrice
Nouveau : 15 septembre 2007
Dans cette leçon, vous allez apprendre à créer la base de données initiatrice et tous les objets Service Broker côté initiateur utilisés dans ce didacticiel. Réalisez ces procédures à partir d'une copie de Management Studio qui s'exécute sur le même ordinateur que l'instance initiatrice 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 d'éditeur de requête, puis exécutez-le de manière à 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. Ce point de terminaison utilise le port par défaut de Service Broker qui est le port TCP 4022 et spécifie que les instances distantes du Moteur de base de données utiliseront des connexions avec 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é de certificat 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 initiatrice, la clé principale et l'utilisateur
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête Changez le mot de passe dans l'instruction CREATE MASTER KEY. Exécutez ensuite le code de manière à créer la base de données cible utilisée pour ce didacticiel. Par défaut, l'option ENABLE_BROKER est activée pour les nouvelles bases de données. Ce code crée également la clé principale et l'utilisateur qui seront utilisés pour prendre en charge le chiffrement et les connexions distantes.
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 initiateur
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête Modifiez le nom de fichier spécifié dans l'instruction BACKUP CERTIFICATE de manière à référencer un dossier de votre système. Exécutez ensuite le code de manière à créer le certificat initiateur utilisé pour chiffrer les messages. Le dossier que vous spécifiez doit avoir des autorisations qui empêchent 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 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 d'éditeur de requête, puis exécutez-le de manière à créer les types de messages de la conversation. Les noms et propriétés spécifiés ici pour les types de messages doivent être identiques à ceux que vous avez créés dans la base de données 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 d'éditeur de requête, puis exécutez-le de manière à créer le contrat de la conversation. Le nom et les propriétés spécifiés ici pour le contrat doivent être identiques à ceux du contrat que vous allez créer dans la base de données 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 côté initiateur
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête, puis exécutez-le de manière à créer la file d'attente et le service utilisés pour la cible. L'instruction CREATE SERVICE associe le service à la file d'attente InstInitiatorQueue. Par conséquent, tous les messages envoyés au service seront reçus dans la file d'attente InstInitiatorQueue. L'instruction CREATE SERVICE spécifie également que seules les conversations qui utilisent le contrat //BothDB/ 2InstSample/SimpleContract qui a été créé précédemment peuvent utiliser le service comme service cible.
CREATE QUEUE InstInitiatorQueue; CREATE SERVICE [//InstDB/2InstSample/InitiatorService] AUTHORIZATION InitiatorUser ON QUEUE InstInitiatorQueue; GO
Créer des références aux objets cibles
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête. Modifiez la clause FILE FROM de manière à référencer le dossier dans lequel vous avez copié le fichier InstInitiatorCertficate.cer de l'étape 3 de la Leçon 1. Exécutez ensuite le code de manière à créer un utilisateur cible et à extraire le certificat cible.
CREATE USER TargetUser WITHOUT LOGIN; CREATE CERTIFICATE InstTargetCertificate AUTHORIZATION TargetUser FROM FILE = N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer' GO
Créer les itinéraires
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête. Remplacez le chaîne MyTargetComputer par le nom de l'ordinateur qui exécute votre instance cible. Exécutez ensuite le code de manière à créer des itinéraires vers le service cible et le service initiateur, de même qu'une liaisons de service distant qui associe TargetUser à l'itinéraire du service initiateur.
Dans les instructions CREATE ROUTE suivantes, il est supposé que l'instance cible ne contient aucun nom de service dupliqué. Si plusieurs bases de données sur l'instance cible contiennent des services portant 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 avez créé les bases de données initiatrices qui seront utilisées pour ce didacticiel. Ensuite, vous allez terminer la configuration de la base de données cible en créant les objets cibles qui ont des dépendances vis-à-vis des objets côté initiateur. Consultez Leçon 3 : Création des objets de conversation côté cible.
Voir aussi
Autres ressources
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)
Sécurité du dialogue Service Broker
Architecture des conversations
Architecture du service