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

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 de Database Engine (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. Después, ejecútelo para crear un extremo de Service Broker para esta instancia de Database Engine (Motor de base de datos). Un extremo 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 de Database Engine (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 en dominios de confianza. Si los equipos no están en dominios de confianza, use la seguridad de certificados para los extremos. Para obtener más información, vea Cómo crear certificados para la seguridad de transporte de 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
    

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 en la instrucción CREATE MASTER KEY. Después, ejecútelo para crear la base de datos de destino que se usa para este tutorial. De manera predeterminada, las bases de datos nuevas tienen la opción ENABLE_BROKER establecida en on (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 que se especifica en la instrucción BACKUP CERTIFICATE para hacer referencia a una carpeta del sistema. Después, ejecútelo para crear el certificado del iniciador que se usa para cifrar los mensajes. La carpeta que especifique deberá 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 de Database Engine (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. Después, ejecútelo para crear los tipos de mensaje para la conversación. Los nombres y propiedades de tipos de mensaje que se especifiquen aquí deben ser idénticos a los que se crearon en InstTargetDB en la 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. Después, ejecútelo para crear el contrato para la conversación. El nombre y las propiedades de contrato que se especifiquen aquí deben ser idénticos a los del contrato que se creará en InstInitiatorDB durante la lección siguiente.

    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. Después, ejecútelo para crear la cola y el servicio que se usa para el destino. La instrucción CREATE SERVICE asocia el servicio a InstInitiatorQueue. Por consiguiente, todos los mensajes que se envíen al servicio se recibirán en InstInitiatorQueue. CREATE SERVICE también especifica que sólo las conversaciones que usan //BothDB/ 2InstSample/SimpleContract, creado 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 cláusula FROM FILE para hacer referencia a la carpeta en la que copió el archivo InstTargetCertficate.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
    

Crear 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.

    Las instrucciones CREATE ROUTE siguientes suponen 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, utilice la cláusula BROKER_INSTANCE para especificar la base de datos en la que desea abrir una conversación.

    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
    

Pasos siguientes

Ha creado correctamente las bases de datos del iniciador que se usarán para el tutorial. Lo próximo será terminar de configurar la base de datos de destino mediante la creación de los objetos de destino que tienen dependencias en los objetos del iniciador. Vea Lección 3: Completar los objetos de conversación de destino.