Condividi tramite


Lezione 2: Creazione del database dell'initiator

In questa lezione verranno descritte le procedure per creare il database dell'initiator e tutti gli oggetti Service Broker dell'initiator utilizzati nell'esercitazione. Eseguire questi passaggi da una copia di Management Studio in esecuzione nello stesso computer come istanza dell'initiator di Motore di database.

Procedure

Creazione di un endpoint di Service Broker

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare un endpoint di Service Broker per questa istanza di Motore di database. Un endpoint di Service Broker specifica l'indirizzo di rete a cui vengono inviati i messaggi di Service Broker. L'endpoint utilizza il valore predefinito 4022 di Service Broker per la porta TCP e specifica che le istanze remote di Motore di database utilizzeranno connessioni con autenticazione di Windows per inviare messaggi.

    È possibile utilizzare l'autenticazione di Windows quando entrambi i computer si trovano nello stesso dominio o in domini trusted. Se i computer non si trovano in domini trusted, utilizzare la protezione dei certificati 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
    

Creazione del database dell'initiator, della chiave master e dell'utente

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Modificare la password nell'istruzione CREATE MASTER KEY. Eseguire quindi il codice per creare il database di destinazione utilizzato per l'esercitazione. Per impostazione predefinita, l'opzione ENABLE_BROKER è attivata per i nuovi database. Il codice crea inoltre la chiave master e l'utente da utilizzare 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
    

Creazione del certificato dell'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. Eseguire quindi il codice per creare il certificato dell'initiator utilizzato 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 utilizzato per l'esecuzione dell'istanza di Motore di database. Ai fini della lezione 3, è necessario copiare manualmente il file InstInitiatorCertificate.cer in una cartella a cui possa accedere l'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
    

Creazione dei tipi di messaggio

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare i tipi di messaggio per la conversazione. I nomi e le proprietà dei tipi di messaggio specificati a questo punto devono essere identici a quelli creati in 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
    

Creazione del contratto

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare il contratto per la conversazione. Il nome e le proprietà del contratto specificati a questo punto devono essere identici a quelli del contratto che verrà creato in InstInitiatorDB durante la lezione successiva.

    CREATE CONTRACT [//BothDB/2InstSample/SimpleContract]
          ([//BothDB/2InstSample/RequestMessage]
             SENT BY INITIATOR,
           [//BothDB/2InstSample/ReplyMessage]
             SENT BY TARGET
          );
    GO
    

Creazione della coda e del servizio per l'initiator

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Eseguire quindi il codice per creare la coda e il servizio utilizzati per la destinazione. L'istruzione CREATE SERVICE associa il servizio a InstInitiatorQueue. Tutti i messaggi inviati al servizio, pertanto, verranno ricevuti in InstInitiatorQueue. L'istruzione CREATE SERVICE specifica inoltre che solo le conversazioni che utilizzano il contratto //BothDB/2InstSample/SimpleContract creato in precedenza possono utilizzare il servizio come servizio di destinazione.

    CREATE QUEUE InstInitiatorQueue;
    
    CREATE SERVICE [//InstDB/2InstSample/InitiatorService]
           AUTHORIZATION InitiatorUser
           ON QUEUE InstInitiatorQueue;
    GO
    

Creazione di riferimenti agli oggetti di destinazione

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Modificare la clausola FROM FILE in modo che faccia riferimento alla cartella in cui è stato copiato il file InstTargetCertficate.cer nel passaggio 3 della lezione 1. Eseguire quindi il codice per creare un utente della destinazione ed effettuare il pull nel certificato di destinazione.

    CREATE USER TargetUser WITHOUT LOGIN;
    
    CREATE CERTIFICATE InstTargetCertificate 
       AUTHORIZATION TargetUser
       FROM FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer'
    GO
    

Creazione di route

  • Copiare e incollare il codice seguente in una finestra dell'editor di query. Impostare la stringa MyTargetComputer sul nome del computer in cui è in esecuzione l'istanza di destinazione. Eseguire quindi il codice per creare route nel servizio di destinazione e nel servizio Initiator e un'associazione al servizio remoto per associare TargetUser alla route del servizio di destinazione.

    Nelle istruzioni CREATE ROUTE seguenti si presuppone che non vi siano nomi di servizio duplicati nell'istanza di destinazione. Se più database nell'istanza di destinazione contengono servizi con lo stesso nome, utilizzare la clausola BROKER_INSTANCE per specificare il database in cui 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 correttamente i database dell'initiator che verranno utilizzati per l'esercitazione. Nel passaggio successivo si completerà la configurazione del database di destinazione creando gli oggetti di destinazione che hanno relazioni di dipendenza con gli oggetti dell'initiator. Vedere Lezione 3: Completamento degli oggetti di conversazione di destinazione.