Leçon 5: réception d'une demande et envoi d'une réponse
Dans cette leçon, vous apprendrez à recevoir un message de demande de la file d'attente de la cible et envoyer un message de réponse au service de l'initiateur. Exécutez ces étapes à partir d'une copie de Management Studio exécutée sur le même ordinateur que l'instance de la 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-le pour basculer le contexte vers la base de données InstTargetDB dans laquelle vous recevrez le message de demande et à partir de laquelle vous enverrez un message de réponse à la base de données 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. Puis, exécutez-le pour recevoir le message de réponse provenant de InstTargetQueue et envoyer un message de réponse à l'initiateur. L'instruction RECEIVE récupère le message de demande. Puis, l'instruction SELECT suivante affiche le texte afin que vous puissiez 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 message de demande et si une instruction SEND est utilisée pour envoyer un message de réponse à l'initiateur. L'instruction END CONVERSATION est utilisée pour mettre fin à la conversation du côté de la cible. La dernière instruction SELECT affiche le texte du message de réponse.
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
Étapes suivantes
Vous avez reçu le message de demande et envoyé un message de réponse au service de l'initiateur. Vous devez ensuite recevoir le message de réponse provenant de la file d'attente de l'initiateur et mettre fin à la conversation. Consultez Leçon 6 : réception de la réponse et fin de la conversation.
Voir aussi