Lección 2: Creación de la base de datos del iniciador

Se aplica a:SQL ServerAzure SQL Managed Instance

En esta lección, aprenderá a crear la base de datos del iniciador y todos los objetos de Service Broker del iniciador que se usan en este tutorial. Ejecute estos pasos desde una copia de Management Studio que se ejecute en el mismo equipo que la instancia del iniciador del motor de base de datos.

Procedimientos

Crear un extremo de Service Broker

  • Copie y pegue el código siguiente en una ventana del Editor de consultas y, a continuación, ejecútelo para crear un punto de conexión de Service Broker para esta instancia del motor de base de datos. Un punto de conexión de Service Broker especifica la dirección de red a la que se envían los mensajes de Service Broker. Este extremo utiliza el puerto TCP predeterminado de Service Broker 4022 y especifica que las instancias remotas del motor de base de datos utilizarán conexiones con la autenticación de Windows para enviar los mensajes.

    La autenticación de Windows funciona cuando ambos equipos están en el mismo dominio o están en dominios de confianza. Si los equipos no están en dominios de confianza, use la seguridad de certificados para los puntos de conexión. Para obtener más información, consulte How to: Create certificates for Service Broker transport security (Cómo: Crear certificados para la seguridad de transporte de 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
    

Crear la base de datos del iniciador, la clave maestra y el usuario

  • Copie y pegue el código siguiente en una ventana del Editor de consultas. Cambie la contraseña de la CREATE MASTER KEY instrucción y ejecute el código para crear la base de datos de destino que se usa para este tutorial. De forma predeterminada, las nuevas bases de datos tienen la ENABLE_BROKER opción activada. El código también crea la clave maestra y el usuario que se usarán para admitir cifrado y conexiones 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
    

Crear el certificado del iniciador

  • Copie y pegue el código siguiente en una ventana del Editor de consultas. Cambie el nombre de archivo especificado en la BACKUP CERTIFICATE instrucción para hacer referencia a una carpeta del sistema. A continuación, ejecute el código para crear el certificado del iniciador que se usa para cifrar los mensajes. La carpeta que especifique debería tener permisos que impidan el acceso desde cuentas que no sean la suya de Windows y la cuenta de Windows con la que se ejecuta la instancia del motor de base de datos. Para la lección 3 debe copiar manualmente el archivo InstInitiatorCertificate.cer en una carpeta a la que se pueda tener acceso desde la instancia 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
    

Crear los tipos de mensaje

  • Copie y pegue el código siguiente en una ventana del Editor de consultas y ejecútelo para crear los tipos de mensaje para la conversación. Los nombres y propiedades de tipo de mensaje especificados aquí deben ser idénticos a los que se crearon en la InstTargetDB lección anterior.

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

Crear el contrato

  • Copie y pegue el código siguiente en una ventana del Editor de consultas y, a continuación, ejecútelo para crear el contrato para la conversación. El nombre del contrato y las propiedades que se especifican aquí deben ser idénticos al contrato que se crea en durante InstInitiatorDB la siguiente lección.

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

Crear la cola y el servicio del iniciador

  • Copie y pegue el código siguiente en una ventana del Editor de consultas y, a continuación, ejecútelo para crear la cola y el servicio que se usa para el destino. La CREATE SERVICE instrucción asocia el servicio a InstInitiatorQueue. Por consiguiente, todos los mensajes que se envíen al servicio se recibirán en InstInitiatorQueue. También CREATE SERVICE especifica que solo las conversaciones que usan BothDB/ 2InstSample/SimpleContract que se creó anteriormente pueden usar el servicio como servicio de destino.

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

Crear las referencias a los objetos de destino

  • Copie y pegue el código siguiente en una ventana del Editor de consultas. Cambie la FROM FILE cláusula para hacer referencia a la carpeta a la que copió el archivo InstTargetCertificate.cer del paso 3 de la lección 1. A continuación, ejecute el código para crear un usuario de destino y extraer el certificado de destino.

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

Creación de rutas

  • Copie y pegue el código siguiente en una ventana del Editor de consultas. Cambie la cadena MyTargetComputer por el nombre del equipo que ejecute su instancia de destino. A continuación, ejecute el código para crear las rutas del servicio de destino y del servicio iniciador, y un enlace de servicio remoto que asocie TargetUser a la ruta del servicio de destino.

    En las instrucciones siguientes CREATE ROUTE se supone que no hay nombres de servicio duplicados en la instancia de destino. Si varias bases de datos de la instancia de destino tienen servicios con el mismo nombre, use la BROKER_INSTANCE cláusula para especificar la base de datos en la que desea abrir una conversación.

    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
    

Paso siguiente

Ha creado correctamente las bases de datos del iniciador para el tutorial. A continuación, finalizará la configuración de la base de datos de destino mediante la creación de los objetos de destino que tienen dependencias en los objetos del iniciador.