Compartilhar via


Lição 2: Criando o banco de dados iniciador

Nesta lição, você aprenderá a criar o banco de dados iniciador e todos os objetos Service Broker iniciadores utilizados neste tutorial. Execute estas etapas de uma cópia do Management Studio que seja executado no mesmo computador da instância iniciadora do Mecanismo de Banco de Dados.

Procedimentos

Crie um ponto de extremidade do Service Broker

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para criar um ponto de extremidade Service Broker para essa instância do Mecanismo de Banco de Dados. O ponto de extremidade Service Broker especifica o endereço de rede para o qual são enviadas mensagens Service Broker. Esse ponto de extremidade utiliza o padrão Service Broker da porta 4022 TCP e especifica que as instâncias remotas do Mecanismo de Banco de Dados usarão as conexões da Autenticação do Windows para enviar mensagens.

    A Autenticação do Windows funciona quando ambos os computadores estão no mesmo domínio ou em domínios confiáveis. Se os computadores não estiverem em domínios confiáveis, use segurança de certificado para os pontos de extremidade. Para obter mais informações, consulte Como criar certificados para a segurança de transporte do 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
    

Criar o banco de dados iniciador, a chave mestra e o usuário

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Altere a senha na instrução CREATE MASTER KEY. Em seguida, execute o código para criar o banco de dados de destino usado para este tutorial. Por padrão, bancos de dados novos têm a opção de ENABLE_BROKER definida como ON. O código também cria a chave mestra e o usuário a serem usados para oferecer suporte à criptografia e às conexões remotas.

    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
    

Criar o certificado de iniciador

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Altere o nome do arquivo especificado na instrução BACKUP CERTIFICATE para que faça referência à pasta do sistema. Em seguida, execute o código para criar o certificado de iniciador que é usado para criptografar mensagens. A pasta especificada deve ter permissões que impeçam o acesso de outras contas que não sejam a conta do Windows e da conta do Windows em que a instância do Mecanismo de Banco de Dados é executada. Com relação à Lição 3, é preciso copiar manualmente o arquivo InstInitiatorCertificate.cer para uma pasta que possa ser acessada da instância de destino.

    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
    

Criar tipos de mensagens

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para criar os tipos de mensagem para a conversação. Os nomes de tipo de mensagem e as propriedades especificadas aqui devem ser idênticos aos que foram criados no InstTargetDB da lição anterior.

    CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage]
           VALIDATION = WELL_FORMED_XML;
    CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
           VALIDATION = WELL_FORMED_XML;
    GO
    

Criar o contrato

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para criar o contrato para a conversação. O nome e as propriedades do contrato especificados aqui devem ser idênticos ao do contrato que você criará no InstInitiatorDB durante a próxima lição.

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

Criar a fila e o serviço do iniciador

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para criar a fila e serviço a serem usados para o destino. A instrução CREATE SERVICE associa o serviço ao InstInitiatorQueue. Portanto, todas as mensagens enviadas ao serviço serão recebidas no InstInitiatorQueue. CREATE SERVICE também especifica que somente conversações que utilizam o //BothDB/ 2InstSample/SimpleContract e que foram criadas anteriormente podem usar o serviço como serviço de destino.

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

Criar referências para objetos de destino

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Altere a cláusula FROM FILE para que ela faça referência à pasta na qual o arquivo InstTargetCertficate.cer foi copiado na Etapa 3 da Lição 1. Em seguida, execute o código para criar um usuário de destino extrair o certificado de destino.

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

Criar rotas

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Altere a cadeia de caracteres MyTargetComputer para o nome do computador que está executando a instância de destino. Em seguida, execute o código para criar rotas para o serviço de destino e serviço iniciador, e uma associação de serviço remoto que vincule o TargetUser à rota de serviço de destino.

    As instruções CREATE ROUTE a seguir supõem que não há nenhum nome de serviço duplicado na instância de destino. Se vários bancos de dados na instância de destino tiverem serviços com um mesmo nome, use a cláusula BROKER_INSTANCE para especificar o banco de dados em que a conversação será aberta.

    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
    

Próximas etapas

Você criou com êxito os bancos de dados de iniciador a serem usados no tutorial. Em seguida, termine de configurar o banco de dados de destino criando os objetos de destino que têm dependências em objetos do iniciador. Consulte Lição 3: Concluindo os objetos de conversação de destino.