Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Managed Instance
I den här lektionen får du lära dig att starta en konversation, slutföra en enkel meddelandecykel för begäran och svara och sedan avsluta konversationen.
Procedurer
Notis
Kodexemplen i den här artikeln har testats med hjälp av AdventureWorks2025 exempeldatabas som du kan ladda ned från Microsoft SQL Server-exempel och Community Projects startsida.
Växla till databasen AdventureWorks2008R2
Kopiera och klistra in följande kod i ett frågeredigerarefönster och kör den sedan för att växla kontext till databasen AdventureWorks2008R2.
USE AdventureWorks2008R2; GO
Starta en konversation och skicka ett meddelande om begäran
Kopiera och klistra in följande kod i ett frågeredigerarefönster och kör den sedan för att starta en konversation och skicka ett begärandemeddelande till AWDB/1DBSample/TargetService. Du måste köra koden i ett block eftersom en variabel används för att skicka ett dialoghandtag från
BEGIN DIALOGtill -instruktionenSEND. Batchen kör -instruktionenBEGIN DIALOGför att starta konversationen. Det skapar ett begärandemeddelande och använder sedan dialoghandtaget i enSEND-instruktion för att skicka begärandemeddelandet i konversationen. Den sistaSELECTinstruktionen visar texten i meddelandet som skickades.DECLARE @InitDlgHandle AS UNIQUEIDENTIFIER; DECLARE @RequestMsg AS 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
Ta emot begäran och skicka ett svar
Kopiera och klistra in följande kod i ett frågeredigerarefönster och kör den sedan för att ta emot svarsmeddelandet
TargetQueue1DBfrån och skicka tillbaka ett svarsmeddelande till initieraren. -instruktionenRECEIVEhämtar begärandemeddelandet. FöljandeSELECTinstruktion visar texten så att du kan kontrollera att det är samma meddelande som skickades i det sista steget. InstruktionenIFtestar om det mottagna meddelandet är en typ av begärandemeddelande och om enSENDinstruktion används för att skicka tillbaka ett svarsmeddelande till initieraren. -instruktionenEND CONVERSATIONanvänds för att avsluta målsidan av konversationen. Den slutligaSELECTinstruktionen visar texten i svarsmeddelandet.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 TargetQueue1DB), TIMEOUT 1000; SELECT @RecvReqMsg AS ReceivedRequestMsg; IF @RecvReqMsgName = N'//AWDB/1DBSample/RequestMessage' BEGIN DECLARE @ReplyMsg AS 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
Ta emot svaret och avsluta konversationen
Kopiera och klistra in följande kod i ett frågeredigerarefönster och kör den sedan för att ta emot svarsmeddelandet och avsluta konversationen. -instruktionen
RECEIVEhämtar svarsmeddelandet frånInitiatorQueue1DB. InstruktionenEND CONVERSATIONavslutar initierarsidan av konversationen. Den sistaSELECTinstruktionen visar texten i svarsmeddelandet så att du kan bekräfta att det är samma som det som skickades i föregående steg.DECLARE @RecvReplyMsg AS NVARCHAR (100); DECLARE @RecvReplyDlgHandle AS UNIQUEIDENTIFIER; BEGIN TRANSACTION; WAITFOR (RECEIVE TOP (1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue1DB), TIMEOUT 1000; END CONVERSATION @RecvReplyDlgHandle; SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
Relaterade uppgifter
- STARTA DIALOGKONVERSATION (Transact-SQL)
- SEND (Transact-SQL)
- TA EMOT (Transact-SQL)
- AVSLUTA KONVERSATION (Transact-SQL)
- Service Broker-applikationer
Nästa steg
Du har slutfört en meddelandecykel för begäran och svar mellan AWDB/1DBSample/InitiatorService och AWDB/1DBSample/TargetService. Du kan upprepa stegen i den här lektionen så många gånger som du vill överföra ett par meddelanden med begärandesvar. När du är klar med att undersöka SEND instruktionerna och REPLY kan du släppa alla objekt som användes av konversationen.