Condividi tramite


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

Data creazione: 15 settembre 2007

In questa lezione verranno illustrate le procedure per 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

  1. Copiare e incollare il codice seguente in una finestra dell'editor di query, quindi eseguirlo per cambiare contesto passando al database InstTargetDB in cui verrà ricevuto il messaggio di richiesta e inviato un messaggio di risposta al database InstInitiatorDB.

    USE InstTargetDB;
    GO
    

Ricevere la richiesta e inviare una risposta

  1. Copiare e incollare il codice seguente in una finestra dell'editor di query, quindi eseguirlo per ricevere il messaggio di risposta dalla coda InstTargetQueue e restituire un messaggio di risposta all'initiator. L'istruzione RECEIVE recupera il messaggio di richiesta, mentre la successiva istruzione SELECT visualizza il testo per consentire di verificare che si tratti del messaggio inviato nel passaggio precedente. L'istruzione IF verifica se il tipo di messaggio ricevuto è un messaggio di richiesta e se viene utilizzata un'istruzione SEND per restituire un messaggio di risposta all'initiator. L'istruzione END CONVERSATION è utilizzata per terminare la conversazione dal lato della destinazione. L'istruzione SELECT finale visualizza il testo del messaggio di risposta.

    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 InstTargetQueue;
    
    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 e inviato un messaggio di risposta al servizio initiator. Nel passaggio successivo verrà ricevuto il messaggio di risposta dalla coda initiator e terminata la conversazione. Vedere Lezione 6: Ricezione della risposta e completamento della conversazione.

Vedere anche

Altre risorse

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

Guida in linea e informazioni

Assistenza su SQL Server 2005