Lição 5: Recebendo uma solicitação e enviando uma resposta

Nesta lição você aprenderá como receber uma mensagem de solicitação na fila de destino e a enviar uma mensagem de resposta para o serviço de iniciador. Execute estas etapas de uma cópia do Management Studio executada no mesmo computador da instância de destino do Mecanismo de Banco de Dados.

Procedimentos

Alternar para o banco de dados TargetDB

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-a para alternar o contexto para o banco de dados InstTargetDB em que você receberá a mensagem de solicitação e enviará uma mensagem de resposta ao InstInitiatorDB.

    USE InstTargetDB;
    GO
    

Receber a solicitação e enviar uma resposta

  • Copie e cole o código a seguir em uma janela do Editor de Consultas. Em seguida, execute-o para receber a mensagem de resposta do InstTargetQueue e enviar uma mensagem de resposta para o iniciador. A instrução RECEIVE recupera a mensagem de solicitação. Depois, a seguinte instrução SELECT é exibida no texto, de modo que se possa verificar se essa é a mesma mensagem enviada na etapa anterior. A instrução IF testa se a mensagem recebida é do tipo de mensagem de solicitação e se uma instrução SEND será usada para enviar uma mensagem de resposta para o iniciador. A instrução END CONVERSATION é usada para concluir o lado de destino da conversação. A instrução SELECT final exibe o texto da mensagem de resposta.

    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
    

Próximas etapas

Você recebeu a mensagem de solicitação com êxito e enviou uma mensagem de resposta para o serviço de iniciador. Em seguida, você receberá a mensagem de resposta da fila do iniciador e concluirá a conversação. Consulte Lição 6: Recebendo a resposta e concluindo a conversação.