Lezione 1: Creazione del database di destinazione

Si applica a:SQL ServerIstanza gestita di SQL di Azure

In questa lezione verranno descritte le procedure per creare il database di destinazione e tutti gli oggetti di destinazione di Service Broker che non hanno relazioni di dipendenza con il database dell'initiator. Eseguire questa procedura da una copia di Management Studio in esecuzione nello stesso computer dell'istanza di destinazione del motore di database.

Procedure

Creare un endpoint di Service Broker

  • Copiare il seguente codice e incollarlo nella finestra dell'Editor di query. Eseguirlo quindi per creare un endpoint di Service Broker per questa istanza del motore di database. Un endpoint di Service Broker stabilisce l'indirizzo di rete a cui vengono inviati i messaggi di Service Broker. L'endpoint usa il valore predefinito 4022 di Service Broker per la porta TCP e stabilisce che le istanze remote del motore di database useranno connessioni con autenticazione di Windows per inviare messaggi.

    L'autenticazione di Windows funziona quando entrambi i computer si trovano nello stesso dominio o nello stesso dominio attendibile. Se i computer non si trovano in domini attendibili, usare la sicurezza basata su certificati per gli endpoint. Per altre informazioni, vedere Procedura: Creazione di certificati per la sicurezza del trasporto di Service Broker (Transact-SQL).

        USE master;
        GO
        IF EXISTS (SELECT * FROM master.sys.endpoints
                   WHERE name = N'InstTargetEndpoint')
             DROP ENDPOINT InstTargetEndpoint;
        GO
        CREATE ENDPOINT InstTargetEndpoint
        STATE = STARTED
        AS TCP ( LISTENER_PORT = 4022 )
        FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
        GO
    

Creare il database di destinazione, la chiave master e l'utente

  • Copiare il seguente codice e incollarlo nella finestra dell'Editor di query. Modificare la password nell'istruzione CREATE MASTER KEY. Quindi, eseguire il codice per creare il database di destinazione usato per questa esercitazione. Per impostazione predefinita, nei nuovi database l'opzione ENABLE_BROKER è attiva. Il codice crea anche la chiave master e l'utente che verranno usati per supportare la crittografia e le connessioni remote.

        USE master;
        GO
        IF EXISTS (SELECT * FROM sys.databases
                   WHERE name = N'InstTargetDB')
             DROP DATABASE InstTargetDB;
        GO
        CREATE DATABASE InstTargetDB;
        GO
        USE InstTargetDB;
        GO
        CREATE MASTER KEY
               ENCRYPTION BY PASSWORD = N'<EnterStrongPassword1Here>';
        GO
        CREATE USER TargetUser WITHOUT LOGIN;
        GO
    

Creare il certificato di destinazione

  • Copiare il seguente codice e incollarlo nella finestra dell'Editor di query. Modificare il nome file specificato nell'istruzione BACKUP CERTIFICATE, in modo da fare riferimento a una cartella nel sistema. Quindi, eseguire il codice per creare il certificato di destinazione usato per crittografare i messaggi. Alla cartella specificata devono essere assegnate le autorizzazioni necessarie per impedire l'accesso ad account diversi dall'account di Windows dell'utente e dall'account di Windows usato per l'esecuzione dell'istanza del motore di database. Ai fini della lezione 2, è necessario copiare manualmente il file InstTargetCertificate.cer in una cartella a cui possa accedere l'istanza dell'initiator.

        CREATE CERTIFICATE InstTargetCertificate
             AUTHORIZATION TargetUser
             WITH SUBJECT = 'Target Certificate',
                  EXPIRY_DATE = N'12/31/2010';
    
        BACKUP CERTIFICATE InstTargetCertificate
          TO FILE =
        N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer';
        GO
    

Creare i tipi di messaggio

  • Copiare e incollare il codice seguente in una finestra di Editor di query, quindi eseguirlo per creare i tipi di messaggio della conversazione. I nomi e le proprietà dei tipi di messaggio specificati a questo punto devono essere identici a quelli che verranno creati in InstInitiatorDB nella lezione successiva.

        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 il seguente codice e incollarlo nella finestra dell'Editor di query. Quindi, eseguirlo per creare il contratto della conversazione. Il nome e le proprietà del contratto specificati a questo punto devono essere identici a quelli del contratto che verrà 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 la coda e il servizio di destinazione

  • Copiare il seguente codice e incollarlo nella finestra dell'Editor di query. Quindi, eseguirlo per creare la coda e il servizio di destinazione. L'istruzione CREATE SERVICE associa il servizio a InstTargetQueue, in modo che tutti i messaggi inviati al servizio vengano ricevuti in InstTargetQueue. L'istruzione CREATE SERVICE specifica inoltre che solo le conversazioni che usano il contratto //BothDB/ 2InstSample/SimpleContract creato in precedenza possono usare il servizio come servizio di destinazione.

        CREATE QUEUE InstTargetQueue;
    
        CREATE SERVICE [//TgtDB/2InstSample/TargetService]
               AUTHORIZATION TargetUser
               ON QUEUE InstTargetQueue
               ([//BothDB/2InstSample/SimpleContract]);
        GO
    

Passaggi successivi

I database che verranno usati per l'esercitazione sono stati creati correttamente. Nel passaggio successivo si creerà il database InstInitiatorDB e lo si configurerà con gli oggetti necessari per supportare il lato initiator di una conversazione di Service Broker. Per altre informazioni, vedere Lezione 2: Creazione del database dell'initiator.

Vedi anche