Condividi tramite


Lezione 5: Ricezione di una richiesta e invio di una risposta

In questa lezione verrà illustrato come ricevere un messaggio di richiesta dalla coda di destinazione e inviare un messaggio di risposta al servizio Initiator. Eseguire questi passaggi da una copia di Management Studio in esecuzione nello stesso computer dell'istanza di destinazione di Motore di database.

Procedure

Passare al database TargetDB

  • Copiare e incollare il seguente codice in una finestra dell'editor di query. Eseguirlo quindi per cambiare contesto passando al database InstTargetDB in cui si riceverà il messaggio di richiesta e si invierà un messaggio di risposta a InstInitiatorDB.

    USE InstTargetDB;
    GO
    

Ricevere la richiesta e inviare una risposta

  • Copiare e incollare il seguente codice in una finestra dell'editor di query. Eseguirlo quindi per ricevere il messaggio di risposta da InstTargetQueue e inviare un messaggio di risposta al servizio Initiator. L'istruzione RECEIVE recupera il messaggio di richiesta, mentre la successiva istruzione SELECT visualizza il testo in modo da poter verificare che si tratti dello stesso messaggio inviato nel passaggio precedente. L'istruzione IF verifica se il messaggio ricevuto è un messaggio di richiesta e se un'istruzione SEND è utilizzata per inviare un messaggio di risposta al servizio Initiator. L'istruzione END CONVERSATION viene utilizzata per terminare la conversazione dal lato di destinazione. L'istruzione SELECT finale visualizza il testo del messaggio di risposta.

    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
    

Passaggi successivi

È stato ricevuto il messaggio di richiesta ed è stato inviato un messaggio di risposta al servizio Initiator. Nel passaggio successivo si riceverà il messaggio di risposta dalla coda del servizio Initiator e la conversazione verrà terminata. Vedere Lezione 6: Ricezione della risposta e fine della conversazione.