Lição 2: Criar o banco de dados do iniciador

Aplica-se a:SQL ServerAzure SQL Managed Instance

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

Procedures

Criar um ponto de extremidade do Service Broker

  • Copie e cole o código a seguir em uma janela do Editor de Consultas e execute-o para criar um ponto de extremidade do Service Broker para esta instância do Mecanismo de Banco de Dados. Um ponto de extremidade do Service Broker especifica o endereço de rede para o qual as mensagens do Service Broker são enviadas. Esse ponto de extremidade usa o padrão do Service Broker da porta TCP 4022 e especifica que instâncias remotas do Mecanismo de Banco de Dados usarão conexões de 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 a segurança de certificado para os pontos de extremidade. Para obter mais informações, consulte Como criar certificados para segurança de transporte do Service Broker.

    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 do 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 CREATE MASTER KEY senha na instrução e execute o código para criar o banco de dados de destino usado para este tutorial. Por padrão, os novos bancos de dados têm a ENABLE_BROKER opção definida como ativada. O código também cria a chave mestra e o usuário que serão usados para suportar criptografia e 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 do iniciador

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Altere o nome do arquivo especificado na BACKUP CERTIFICATE instrução para fazer referência a uma pasta no seu sistema. Em seguida, execute o código para criar o certificado de iniciador usado para criptografar mensagens. A pasta especificada deve ter permissões que impeçam o acesso de contas diferentes da sua conta do Windows e da conta do Windows na qual a instância do Mecanismo de Banco de Dados está sendo executada. Para a Lição 3, você deve copiar manualmente o arquivo InstInitiatorCertificate.cer para uma pasta que possa ser acessada a partir 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 os tipos de mensagem

  • Copie e cole o código a seguir em uma janela do Editor de Consultas e execute-o para criar os tipos de mensagem para a conversa. Os nomes e propriedades de tipo de mensagem especificados aqui devem ser idênticos aos que foram criados na InstTargetDB 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 e execute-o para criar o contrato para a conversa. O nome do contrato e as propriedades especificadas aqui devem ser idênticos ao contrato criado na InstInitiatorDB 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 do iniciador e o serviço

  • Copie e cole o código a seguir em uma janela do Editor de Consultas e execute-o para criar a fila e o serviço usados para o destino. A CREATE SERVICE instrução associa o serviço com o InstInitiatorQueue. Portanto, todas as mensagens que são enviadas para o serviço serão recebidas no InstInitiatorQueue. O CREATE SERVICE também especifica que somente conversas que usam o BothDB/ 2InstSample/SimpleContract que foi criado anteriormente podem usar o serviço como um serviço de destino.

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

Criar referências a objetos de destino

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Altere a FROM FILE cláusula para fazer referência à pasta para a qual você copiou o arquivo de InstTargetCertificate.cer da etapa 3 da Lição 1. Em seguida, execute o código para criar um usuário de destino e obter 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 sua instância de destino. Em seguida, execute o código para criar rotas para o serviço de destino e o serviço iniciador e uma associação de serviço remoto que associe o TargetUser à rota de serviço de destino.

    As instruções a seguir CREATE ROUTE pressupõem que não há nomes de serviço duplicados na instância de destino. Se vários bancos de dados na instância de destino tiverem serviços com o mesmo nome, use a BROKER_INSTANCE cláusula para especificar o banco de dados no qual você deseja abrir uma conversa.

    DECLARE @Cmd AS NVARCHAR (4000);
    
    SET @Cmd = N'USE InstInitiatorDB;
                 CREATE ROUTE InstTargetRoute
                 WITH SERVICE_NAME =
                     N''//TgtDB/2InstSample/TargetService'',
                     ADDRESS = N''TCP://MyTargetComputer:4022'';';
    
    EXECUTE (@Cmd);
    
    SET @Cmd = N'USE msdb
                 CREATE ROUTE InstInitiatorRoute
                 WITH SERVICE_NAME =
                     N''//InstDB/2InstSample/InitiatorService'',
                     ADDRESS = N''LOCAL''';
    
    EXECUTE (@Cmd);
    GO
    
    CREATE REMOTE SERVICE BINDING TargetBinding
        TO SERVICE N'//TgtDB/2InstSample/TargetService'
        WITH USER = TargetUser;
    GO
    

Próximo passo

Você criou com êxito os bancos de dados do iniciador para o tutorial. Em seguida, conclua a configuração do banco de dados de destino criando os objetos de destino que têm dependências em objetos iniciadores.