Lección 5: Recibir una solicitud y enviar una respuesta

En esta lección, obtendrá información sobre cómo recibir un mensaje de solicitud de la cola de destino y enviar un mensaje de respuesta al servicio iniciador. Ejecute estos pasos desde una copia de Management Studio que se ejecute en el mismo equipo que la instancia de destino de Database Engine (Motor de base de datos).

Procedimientos

Cambiar a la base de datos TargetDB

  • Copie y pegue el código siguiente en una ventana del Editor de consultas. A continuación, ejecútelo para intercambiar el contexto a la base de datos InstTargetDB donde recibirá el mensaje de solicitud y enviar un mensaje de respuesta a InstInitiatorDB.

    USE InstTargetDB;
    GO
    

Recibir una solicitud y enviar una respuesta

  • 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 la InstTargetQueue y enviar un mensaje de respuesta al iniciador. La instrucción RECEIVE recupera el mensaje de solicitud. Después, 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 prueba si el mensaje recibido es un tipo de mensaje de solicitud y si se usa una instrucción SEND para enviar de vuelta un mensaje de respuesta al iniciador. La instrucción END CONVERSATION se usa 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;
    
    WAITFOR
    ( RECEIVE TOP(1)
        @RecvReqDlgHandle = conversation_handle,
        @RecvReqMsg = message_body,
        @RecvReqMsgName = message_type_name
      FROM InstTargetQueue
    ), TIMEOUT 1000;
    
    SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
    IF @RecvReqMsgName = N'//BothDB/2InstSample/RequestMessage'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
            N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
              (@ReplyMsg);
    
         END CONVERSATION @RecvReqDlgHandle;
    END
    
    SELECT @ReplyMsg AS SentReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Pasos siguientes

Ha recibido el mensaje de solicitud correctamente y ha enviado un mensaje de respuesta al servicio iniciador. A continuación, recibirá el mensaje de respuesta de la cola del iniciador y finalizará la conversación. Vea Lección 6: Recibir la respuesta y finalizar la conversación.