Share via


Lección 4: Comenzar una conversación y transmitir los mensajes

Nuevo: 15 de septiembre de 2007

En esta lección, aprenderá a iniciar una conversación que abarca dos bases de datos en la misma instancia de Database Engine (Motor de base de datos). También aprenderá a finalizar un sencillo ciclo de mensaje solicitud-respuesta y, a continuación, finalizar la conversación.

Procedimientos

Cambiar a la base de datos InitiatorDB

  1. Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para cambiar el contexto a la base de datos InitiatorDB donde iniciará la conversación.

    USE InitiatorDB;
    GO
    

Iniciar una conversación y enviar un mensaje de solicitud

  1. Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para iniciar una conversación y enviar un mensaje de solicitud a //TgtDB/2DBSample/TargetService en TargetDB. El código se debe ejecutar en un bloque porque se utiliza una variable para pasar un identificador de diálogo desde la instrucción BEGIN DIALOG hasta la instrucción SEND. El lote ejecuta la instrucción BEGIN DIALOG para iniciar la conversación y generar un mensaje de solicitud. A continuación, utiliza el identificador de diálogo en una instrucción SEND para enviar el mensaje de solicitud en esa conversación. La instrucción SELECT final muestra el texto del mensaje que se envió.

    DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RequestMsg NVARCHAR(100);
    
    BEGIN TRANSACTION;
    
    BEGIN DIALOG @InitDlgHandle
         FROM SERVICE [//InitDB/2DBSample/InitiatorService]
         TO SERVICE N'//TgtDB/2DBSample/TargetService'
         ON CONTRACT [//BothDB/2DBSample/SimpleContract]
         WITH
             ENCRYPTION = OFF;
    
    SELECT @RequestMsg =
       N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE [//BothDB/2DBSample/RequestMessage]
          (@RequestMsg);
    
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

Cambiar a la base de datos TargetDB

  1. Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para cambiar el contexto a la base de datos TargetDB donde recibirá el mensaje de solicitud y para devolver un mensaje de respuesta a InitiatorDB.

    USE TargetDB;
    GO
    

Recibir la solicitud y enviar una respuesta

  1. Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para recibir el mensaje de respuesta de TargetQueue2DB y devolver un mensaje de respuesta al iniciador. La instrucción RECEIVE recupera el mensaje de solicitud. A continuación, la siguiente instrucción SELECT muestra el texto para que pueda comprobar que es el mismo mensaje que se envió en el paso anterior. La instrucción IF comprueba si el mensaje recibido es un tipo de mensaje de solicitud y utiliza una instrucción SEND para devolver un mensaje de respuesta al iniciador. También comprueba si se utiliza la instrucción END CONVERSATION para finalizar el lado de destino de la conversación. La instrucción SELECT final muestra el texto del mensaje de respuesta.

    DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RecvReqMsg NVARCHAR(100);
    DECLARE @RecvReqMsgName sysname;
    
    BEGIN TRANSACTION;
    
    RECEIVE TOP(1)
        @RecvReqDlgHandle = conversation_handle,
        @RecvReqMsg = message_body,
        @RecvReqMsgName = message_type_name
    FROM TargetQueue2DB;
    
    SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
    IF @RecvReqMsgName =
       N'//BothDB/2DBSample/RequestMessage'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
            N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE
                [//BothDB/2DBSample/ReplyMessage] (@ReplyMsg);
    
         END CONVERSATION @RecvReqDlgHandle;
    END
    
    SELECT @ReplyMsg AS SentReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Cambiar a la base de datos InitiatorDB

  1. Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para cambiar el contexto a la base de datos InitiatorDB donde recibirá el mensaje de respuesta y para finalizar la conversación.

    USE InitiatorDB;
    GO
    

Recibir la respuesta y finalizar la conversación

  1. Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para recibir el mensaje de respuesta y finalizar la conversación. La instrucción RECEIVE recupera el mensaje de respuesta de InitiatorQueue2DB. La instrucción END CONVERSATION finaliza el lado del iniciador de la conversación. La última instrucción SELECT muestra el texto del mensaje de respuesta para que pueda confirmar que es igual al que se envió en el paso anterior.

    DECLARE @RecvReplyMsg NVARCHAR(100);
    DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER;
    
    BEGIN TRANSACTION;
    
    RECEIVE TOP(1)
        @RecvReplyDlgHandle = conversation_handle,
        @RecvReplyMsg = message_body
        FROM InitiatorQueue2DB;
    
    END CONVERSATION @RecvReplyDlgHandle;
    
    -- Display recieved request.
    SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Pasos siguientes

Con esto finaliza el tutorial. Los tutoriales proporcionan una información general breve y no describen todas las opciones disponibles. Los tutoriales han simplificado el tratamiento de la lógica y del control de errores para centrarse mejor en las operaciones fundamentales. Para crear conversaciones eficaces, confiables y robustas, necesita utilizar un código más complejo que el que sirve de ejemplo en este tutorial.

Volver a los tutoriales de Service Broker

Tutoriales de Service Broker

Vea también

Otros recursos

BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
WAITFOR (Transact-SQL)
Service Broker Programming Basics

Ayuda e información

Obtener ayuda sobre SQL Server 2005