Leçon 5 : Recevoir une demande et envoyer une réponse

S’applique à :SQL ServerAzure SQL Managed Instance

Dans cette leçon, vous allez apprendre à recevoir un message de demande de la file d’attente cible et à envoyer un message de réponse au service initiateur. Exécutez ces étapes à partir d’une copie de Management Studio qui s’exécute sur le même ordinateur que l’instance cible du moteur de base de données.

Procédures

Basculer vers la base de données TargetDB

  • Copiez et collez le code suivant dans une fenêtre de l’Éditeur de requête, puis exécutez-la pour basculer le contexte vers la base de données InstTargetDB où vous recevez le message de demande et renvoyez un message de réponse à InstInitiatorDB.

    USE InstTargetDB;
    GO
    

Recevoir la demande et envoyer une réponse

  • Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Ensuite, exécutez-le pour recevoir le message de réponse de InstTargetQueue et envoyer un message de réponse à l’initiateur. L’instruction RECEIVE récupère le message de requête, puis l’instruction suivante SELECT affiche le texte afin de pouvoir vérifier qu’il s’agit du même message envoyé à l’étape précédente. L’instruction IF teste si le message reçu est un type de message de demande et si une SEND instruction est utilisée pour renvoyer un message de réponse à l’initiateur. L’instruction END CONVERSATION est utilisée pour mettre fin au côté cible de la conversation. L’instruction finale SELECT affiche le texte du message de réponse.

    DECLARE @RecvReqDlgHandle AS UNIQUEIDENTIFIER;
    DECLARE @RecvReqMsg AS NVARCHAR (100);
    DECLARE @RecvReqMsgName AS 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 AS 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
    

Étape suivante

Vous avez reçu le message de demande et envoyé un message de réponse au service initiateur. Ensuite, vous recevez le message de réponse de la file d’attente de l’initiateur et terminez la conversation.