Lezione 2: Creazione del database initiator
Data creazione: 15 settembre 2007
In questa lezione saranno illustrate le procedure per creare il database initiator e tutti gli oggetti Service Broker initiator utilizzati in questa esercitazione. Eseguire questi passaggi da una copia di Management Studio in esecuzione nello stesso computer dell'istanza initiator di Motore di database.
Procedure
Creare un endpoint di Service Broker
Copiare e incollare il codice seguente in una finestra dell'editor di query, quindi eseguirlo per creare un endpoint di Service Broker per questa istanza di Motore di database. Un endpoint di Service Broker specifica l'indirizzo di rete al quale sono inviati i messaggi di Service Broker. Questo endpoint utilizza la porta TCP predefinita, 4022, di Service Broker e specifica che le istanze remote di Motore di database utilizzeranno le connessioni di Autenticazione di Windows per inviare messaggi.
Autenticazione di Windows funziona quando entrambi i computer appartengono allo stesso dominio o si trovano in domini attendibili. Se i computer non sono in domini attendibili, utilizzare la protezione del certificato per gli endpoint. Per ulteriori informazioni, vedere Procedura: Creazione di certificati per la protezione del trasporto di 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
Creare il database initiator, la chiave master e l'utente
Copiare e incollare il codice seguente in una finestra dell'editor di query. Modificare la password nell'istruzione CREATE MASTER KEY, quindi eseguire il codice per creare il database di destinazione utilizzato per questa esercitazione. Nei nuovi database l'opzione ENABLE_BROKER è attivata per impostazione predefinita. Il codice crea anche la chiave master e l'utente che saranno utilizzati per supportare la crittografia e le connessioni remote.
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
Creare il certificato initiator
Copiare e incollare il codice seguente in una finestra dell'editor di query. Modificare il nome file specificato nell'istruzione BACKUP CERTIFICATE per fare riferimento a una cartella del sistema. Quindi eseguire il codice per creare il certificato initiator utilizzato per crittografare i messaggi. È necessario specificare una cartella che disponga di autorizzazioni che impediscono l'accesso da account diversi dall'account di Windows in uso e dall'account di Windows con il quale è in esecuzione l'istanza di Motore di database. Per la lezione 3 è necessario copiare manualmente il file InstInitiatorCertificate.cer in una cartella a cui è possibile accedere dall'istanza di destinazione.
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
Creare i tipi di messaggio
Copiare e incollare il codice seguente in una finestra dell'editor di query, quindi eseguirlo per creare i tipi di messaggi per la conversazione. I nomi e le proprietà dei tipi di messaggio specificati devono essere identici a quelli che sono stati creati nel database InstTargetDB nella lezione precedente.
CREATE MESSAGE TYPE [//BothDB/ 2InstSample/RequestMessage] VALIDATION = WELL_FORMED_XML; CREATE MESSAGE TYPE [//BothDB/ 2InstSample/ReplyMessage] VALIDATION = WELL_FORMED_XML; GO
Creare il contratto
Copiare e incollare il codice seguente in una finestra dell'editor di query, quindi eseguirlo per creare il contratto relativo alla conversazione. Il nome e le proprietà del contratto specificati devono essere identici al contratto che sarà creato in InstInitiatorDB nella lezione successiva.
CREATE CONTRACT [//BothDB/ 2InstSample/SimpleContract] ([//BothDB/ 2InstSample/RequestMessage] SENT BY INITIATOR, [//BothDB/ 2InstSample/ReplyMessage] SENT BY TARGET ); GO
Creare il servizio e la coda initiator
Copiare e incollare il codice seguente in una finestra dell'editor di query, quindi eseguirlo per creare la coda e il servizio utilizzato per la destinazione. L'istruzione CREATE SERVICE associa il servizio alla coda InstInitiatorQueue, pertanto tutti i messaggi inviati al servizio saranno ricevuti nella coda InstInitiatorQueue. L'istruzione CREATE SERVICE specifica inoltre che possono utilizzare il servizio come servizio di destinazione solo le conversazioni che utilizzano il contratto //BothDB/ 2InstSample/SimpleContract creato in precedenza.
CREATE QUEUE InstInitiatorQueue; CREATE SERVICE [//InstDB/2InstSample/InitiatorService] AUTHORIZATION InitiatorUser ON QUEUE InstInitiatorQueue; GO
Creare riferimenti ad oggetti di destinazione
Copiare e incollare il codice seguente in una finestra dell'editor di query. Modificare la clausola FROM FILE per fare riferimento alla cartella in cui è stato copiato il file InstTargetCertficate.cer nel passaggio 3 della lezione 1. Quindi eseguire il codice per creare un utente di destinazione e inserire il certificato di destinazione.
CREATE USER TargetUser WITHOUT LOGIN; CREATE CERTIFICATE InstTargetCertificate AUTHORIZATION TargetUser FROM FILE = N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer' GO
Creare route
Copiare e incollare il codice seguente in una finestra dell'editor di query. Impostare la stringa MyTargetComputer sul nome del computer su cui è in esecuzione l'istanza di destinazione. Quindi eseguire il codice per creare route al servizio di destinazione e al servizio initiator, nonché un'associazione al servizio remoto che associa TargetUser alla route del servizio di destinazione.
Le istruzioni CREATE ROUTE riportate di seguito presuppongono l'assenza di nomi di servizio duplicati nell'istanza di destinazione. In presenza di più database sull'istanza di destinazione contenenti servizi con lo stesso nome, utilizzare la clausola BROKER_INSTANCE per specificare il database nel quale si desidera aprire una conversazione.
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
Passaggi successivi
Sono stati creati i database initiator che saranno utilizzati nel corso dell'esercitazione. Nel passaggio successivo la configurazione del database di destinazione verrà completata creando gli oggetti di destinazione con dipendenze da oggetti initiator. Vedere Lezione 3: Completamento degli oggetti di conversazione di destinazione.
Vedere anche
Altre risorse
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)
Protezione del dialogo di Service Broker
Architettura delle conversazioni
Architettura dei servizi