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.
Nouveau : 15 septembre 2007
Dans cette leçon, vous allez apprendre à démarrer une conversation, à réaliser un cycle de messages simple de type demande-réponse, puis à terminer la conversation.
Procédures
Basculer vers la base de données AdventureWorks
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête, puis exécutez-le de manière à basculer le contexte vers la base de données AdventureWorks.
USE AdventureWorks; GO
Démarrer une conversation et envoyer un message de demande
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête, puis exécutez-le de manière à démarrer une conversation et à envoyer un message de demande au service //AWDB/1DBSample/TargetService. Le code doit être exécuté dans un bloc car une variable est utilisée pour passer un handle de dialogue de l'instruction BEGIN DIALOG à l'instruction SEND. Le lot exécute l'instruction BEGIN DIALOG pour démarrer la conversation. Il génère un message de demande, puis utilise le handle de dialogue dans une instruction SEND pour envoyer le message de demande sur cette conversation. La dernière instruction SELECT affiche le texte du message qui a été envoyé.
DECLARE @InitDlgHandle UNIQUEIDENTIFIER; DECLARE @RequestMsg NVARCHAR(100); BEGIN TRANSACTION; BEGIN DIALOG @InitDlgHandle FROM SERVICE [//AWDB/1DBSample/InitiatorService] TO SERVICE N'//AWDB/1DBSample/TargetService' ON CONTRACT [//AWDB/1DBSample/SampleContract] WITH ENCRYPTION = OFF; SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>'; SEND ON CONVERSATION @InitDlgHandle MESSAGE TYPE [//AWDB/1DBSample/RequestMessage] (@RequestMsg); SELECT @RequestMsg AS SentRequestMsg; COMMIT TRANSACTION; GO
Recevoir la demande et envoyer une réponse
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête, puis exécutez-le de manière à recevoir le message de réponse de la file d'attente TargetQueue2DB et à renvoyer un message de réponse à l'initiateur. L'instruction RECEIVE récupère le message de demande. L'instruction SELECT suivante affiche le texte afin que vous puissiez vérifier que le message est identique à celui envoyé au cours de la dernière étape. L'instruction IF teste si le message reçu est un message de demande et si une instruction SEND est utilisée pour renvoyer un message de réponse à l'initiateur. L'instruction END CONVERSATION est utilisée pour terminer la conversation côté 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; RECEIVE TOP(1) @RecvReqDlgHandle = conversation_handle, @RecvReqMsg = message_body, @RecvReqMsgName = message_type_name FROM TargetQueue1DB; SELECT @RecvReqMsg AS ReceivedRequestMsg; IF @RecvReqMsgName = N'//AWDB/1DBSample/RequestMessage' BEGIN DECLARE @ReplyMsg NVARCHAR(100); SELECT @ReplyMsg = N'<ReplyMsg>Message for Initiator service.</ReplyMsg>'; SEND ON CONVERSATION @RecvReqDlgHandle MESSAGE TYPE [//AWDB/1DBSample/ReplyMessage] (@ReplyMsg); END CONVERSATION @RecvReqDlgHandle; END SELECT @ReplyMsg AS SentReplyMsg; COMMIT TRANSACTION; GO
Recevoir la réponse et terminer la conversation
Copiez et collez le code suivant dans une fenêtre d'éditeur de requête, puis exécutez-le de manière à recevoir le message de réponse et à terminer la conversation. L'instruction RECEIVE récupère le message de réponse dans la file d'attente InitiatorQueue2DB. L'instruction END CONVERSATION termine la conversation côté initiateur. La dernière instruction SELECT affiche le texte du message de réponse afin que vous puissiez confirmer qu'il est identique à celui qui a été envoyé lors de l'étape précédente.
DECLARE @RecvReplyMsg NVARCHAR(100); DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER; BEGIN TRANSACTION; RECEIVE TOP(1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue1DB; END CONVERSATION @RecvReplyDlgHandle; SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
Étapes suivantes
Vous avez réalisé un cycle de messages de type demande-réponse entre le service //AWDB/1DBSample/InitiatorService et le service //AWDB/1DBSample/TargetService. Vous pouvez répéter les étapes de cette leçon autant de fois que vous souhaitez pour transmettre une paire de messages de type demande-réponse. Une fois que vous avez terminé de tester les instructions SEND et REPLY, vous pouvez supprimer tous les objets utilisés par la conversation. Pour plus d'informations, consultez Leçon 3 : Suppression des objets de conversation.
Voir aussi
Autres ressources
BEGIN DIALOG CONVERSATION (Transact-SQL)
SEND (Transact-SQL)
RECEIVE (Transact-SQL)
END CONVERSATION (Transact-SQL)
Service Broker Programming Basics