Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Managed Instance
Dans cette leçon, vous allez apprendre à démarrer une conversation qui s’étend sur deux bases de données dans la même instance du moteur de base de données. Vous allez également apprendre à effectuer un cycle de message de demande-réponse simple, puis à terminer la conversation.
Procédures
Basculer vers la base de données InitiatorDB
Copiez et collez le code suivant dans une fenêtre éditeur de requête, puis exécutez-la pour basculer le contexte vers la base de données InitiatorDB où vous lancez la conversation.
USE InitiatorDB; GO
Démarrer une conversation et envoyer un message de demande
Copiez et collez le code suivant dans une fenêtre de l’Éditeur de requête, puis exécutez-la pour démarrer une conversation et envoyer un message de demande à TgtDB/2DBSample/TargetService dans TargetDB. Le code doit être exécuté dans un bloc, car une variable est utilisée pour passer un handle de boîte de dialogue de
BEGIN DIALOGl’instructionSEND. Le lot exécute l’instructionBEGIN DIALOGpour commencer la conversation et générer un message de requête. Ensuite, il utilise le handle de boîte de dialogue dans uneSENDinstruction pour envoyer le message de demande sur cette conversation. La dernièreSELECTinstruction affiche le texte du message envoyé.DECLARE @InitDlgHandle AS UNIQUEIDENTIFIER; DECLARE @RequestMsg AS NVARCHAR (100); BEGIN TRANSACTION; BEGIN DIALOG @InitDlgHandle FROM SERVICE [//InitDB/2DBSample/InitiatorService] TO SERVICE N'//TgtDB/2DBSample/TargetService' ON CONTRACT [//BothDB/2DBSample/SimpleContract] WITH ENCRYPTION = OFF; SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>'; SEND ON CONVERSATION (@InitDlgHandle) MESSAGE TYPE [//BothDB/2DBSample/RequestMessage] (@RequestMsg); SELECT @RequestMsg AS SentRequestMsg; COMMIT TRANSACTION; GO
Basculer vers la base de données TargetDB
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Ensuite, exécutez-le pour basculer vers la
TargetDBbase de données où vous recevez le message de demande et renvoyez un message de réponse à laInitiatorDBbase de données .USE TargetDB; 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-la pour recevoir le message de réponse de TargetQueue2DB et renvoyer un message de réponse à l’initiateur. L’instruction
RECEIVErécupère le message de requête. Ensuite, l’instruction suivanteSELECTaffiche le texte pour vous permettre de vérifier qu’il s’agit du même message envoyé à l’étape précédente. L’instructionIFteste si le message reçu est un type de message de demande et si uneSENDinstruction est utilisée pour renvoyer un message de réponse à l’initiateur. Il teste également si l’instructionEND CONVERSATIONest utilisée pour mettre fin au côté cible de la conversation. L’instruction finaleSELECTaffiche 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 TargetQueue2DB), TIMEOUT 1000; SELECT @RecvReqMsg AS ReceivedRequestMsg; IF @RecvReqMsgName = N'//BothDB/2DBSample/RequestMessage' BEGIN DECLARE @ReplyMsg AS NVARCHAR (100); SELECT @ReplyMsg = N'<ReplyMsg>Message for Initiator service.</ReplyMsg>'; SEND ON CONVERSATION (@RecvReqDlgHandle) MESSAGE TYPE [//BothDB/2DBSample/ReplyMessage] (@ReplyMsg); END CONVERSATION @RecvReqDlgHandle; END SELECT @ReplyMsg AS SentReplyMsg; COMMIT TRANSACTION; GO
Basculer vers la base de données InitiatorDB
Copiez et collez le code suivant dans une fenêtre de l'éditeur de requête. Ensuite, exécutez-le pour revenir au contexte vers la base de données InitiatorDB où vous recevez le message de réponse et terminez la conversation.
USE InitiatorDB; GO
Recevoir la réponse et mettre fin à la conversation
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 et mettre fin à la conversation. L’instruction
RECEIVErécupère le message de réponse de l’InitiatorQueue2DB. L’instructionEND CONVERSATIONmet fin au côté initiateur de la conversation. La dernièreSELECTinstruction affiche le texte du message de réponse afin que vous puissiez confirmer qu’il est identique à ce qui a été envoyé à l’étape précédente.DECLARE @RecvReplyMsg AS NVARCHAR (100); DECLARE @RecvReplyDlgHandle AS UNIQUEIDENTIFIER; BEGIN TRANSACTION; WAITFOR (RECEIVE TOP (1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue2DB), TIMEOUT 1000; END CONVERSATION @RecvReplyDlgHandle; -- Display received request. SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO