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 à effectuer un cycle de message de demande-réponse de base dans un système configuré avec une procédure stockée d’activation interne.
Procédures
Basculer vers la base de données AdventureWorks
Remarque
Les exemples de code de cet article ont été testés à l’aide de l’exemple de base de données AdventureWorks2025, que vous pouvez télécharger à partir de la Microsoft SQL Server Samples and Community Projects page d’accueil.
Copiez et collez le code suivant dans une fenêtre éditeur de requête, puis exécutez-la pour basculer le contexte vers la AdventureWorks2025 base de données.
USE AdventureWorks2022;
GO
Commencer 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 à aWDB/InternalAct/TargetService. Le code doit être exécuté dans un seul bloc, car une variable est utilisée pour passer un gestionnaire de dialogue de 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 requête, puis utilise le handle de boîte de dialogue dans une SEND instruction pour envoyer le message de requête sur cette conversation. La dernière SELECT instruction affiche le texte du message envoyé.
DECLARE @InitDlgHandle AS UNIQUEIDENTIFIER;
DECLARE @RequestMsg AS NVARCHAR (100);
BEGIN TRANSACTION;
BEGIN DIALOG @InitDlgHandle
FROM SERVICE [//AWDB/InternalAct/InitiatorService]
TO SERVICE N'//AWDB/InternalAct/TargetService'
ON CONTRACT [//AWDB/InternalAct/SampleContract]
WITH ENCRYPTION = OFF;
-- Send a message on the conversation
SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>';
SEND ON CONVERSATION (@InitDlgHandle)
MESSAGE TYPE [//AWDB/InternalAct/RequestMessage] (@RequestMsg);
-- Display sent request.
SELECT @RequestMsg AS SentRequestMsg;
COMMIT TRANSACTION;
GO
Recevoir la demande et envoyer une réponse
Lorsque vous envoyez le message de demande, Service Broker active automatiquement une copie de TargetActiveProc. La procédure stockée reçoit le message de réponse provenant de TargetQueueIntAct et renvoie un message de réponse à l'initiateur.
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 RECEIVE récupère le message de réponse de l’InitiatorQueueIntAct. L’instruction END CONVERSATION met fin au côté initiateur de la conversation et envoie un message EndDialog au service cible. La dernière SELECT instruction 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 InitiatorQueueIntAct),
TIMEOUT 5000;
END CONVERSATION @RecvReplyDlgHandle;
-- Display received request.
SELECT @RecvReplyMsg AS ReceivedReplyMsg;
COMMIT TRANSACTION;
GO
Terminer la conversation côté cible
Lorsque vous exécutez l’instruction END CONVERSATION pour l’initiateur, Service Broker envoie un message EndDialog à la file d’attente TargetQueueIntAct . La procédure TargetActiveProc reçoit le message EndDialog et émet un END CONVERSATION qui met fin du côté cible de la conversation.
Étape suivante
Vous avez terminé un cycle de message de demande-réponse entre AWDB/InternalAct/InitiatorService et AWDB/InternalAct/TargetService. Vous pouvez répéter les étapes de cette leçon à chaque fois que vous souhaitez transmettre une paire de messages demande-réponse. Lorsque vous avez terminé d’examiner les instructions SEND et REPLY, vous pouvez supprimer tous les objets utilisés par la conversation.