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 lär du dig att starta en konversation som sträcker sig över två databaser i samma instans av databasmotorn. Du får också lära dig hur du slutför en enkel meddelandecykel för begärandesvar och sedan avslutar konversationen.
Procedures
Växla till InitiatorDB-databasen
Kopiera och klistra in följande kod i ett frågeredigerarefönster och kör den sedan för att växla kontext till InitiatorDB-databasen där du initierar konversationen.
USE InitiatorDB; GO
Starta en konversation och skicka ett meddelande om begäran
Kopiera och klistra in följande kod i ett frågeredigerarefönster, kör den sedan för att starta en konversation och skicka ett begärandemeddelande till TgtDB/2DBSample/TargetService i TargetDB. Koden måste köras 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 och skapa ett begärandemeddelande. Sedan använder den dialoghandtaget i enSEND-instruktion för att skicka begärandemeddelandet om 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 [//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
Växla till TargetDB-databasen
Kopiera och klistra in följande kod i ett frågeredigerarefönster. Kör den sedan för att växla kontext till databasen
TargetDBdär du får begärandemeddelandet och skicka ett svarsmeddelande tillbaka tillInitiatorDB.USE TargetDB; GO
Ta emot begäran och skicka ett svar
Kopiera och klistra in följande kod i ett frågeredigerarefönster, kör den för att ta emot svarsmeddelandet från TargetQueue2DB och skicka ett svarsmeddelande tillbaka till initieraren. -instruktionen
RECEIVEhämtar begärandemeddelandet.SELECTFöljande instruktion visar sedan texten så att du kan kontrollera att det är samma meddelande som skickades i föregående steg. 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. Den testar också om -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 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
Växla till InitiatorDB-databasen
Kopiera och klistra in följande kod i ett frågeredigerarefönster. Kör den sedan för att växla tillbaka kontexten till InitiatorDB-databasen där du får svarsmeddelandet och avsluta konversationen.
USE InitiatorDB; GO
Ta emot svaret och avsluta konversationen
Kopiera och klistra in följande kod i ett frågeredigerarefönster. Kör den sedan för att ta emot svarsmeddelandet och avsluta konversationen. Instruktionen
RECEIVEhämtar svarsmeddelandet från InitiatorQueue2DB. 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 InitiatorQueue2DB), TIMEOUT 1000; END CONVERSATION @RecvReplyDlgHandle; -- Display received request. SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO