Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
In deze les leert u hoe u een gesprek start dat twee databases omvat in hetzelfde exemplaar van de database-engine. U leert ook hoe u een eenvoudige cyclus voor het beantwoorden van aanvragen voltooit en vervolgens het gesprek beëindigt.
Procedures
Overschakelen naar de InitiatorDB-database
Kopieer en plak de volgende code in een queryeditorvenster en voer deze uit om de context over te schakelen naar de InitiatorDB-database waar u het gesprek start.
USE InitiatorDB; GO
Een gesprek starten en een aanvraagbericht verzenden
Kopieer en plak de volgende code in een queryeditorvenster, voer deze uit om een gesprek te starten en een aanvraagbericht te verzenden naar de TgtDB/2DBSample/TargetService in targetDB. De code moet in één blok worden uitgevoerd omdat een variabele wordt gebruikt om een dialoogvenstergreep van
BEGIN DIALOGde instructie door teSENDgeven. De batch voert deBEGIN DIALOGinstructie uit om het gesprek te starten en een aanvraagbericht te maken. Vervolgens wordt de dialoogvenstergreep in eenSENDinstructie gebruikt om het aanvraagbericht in dat gesprek te verzenden. In de laatsteSELECTinstructie wordt de tekst weergegeven van het bericht dat is verzonden.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
Overschakelen naar de TargetDB-database
Kopieer en plak de volgende code in een queryeditorvenster. Voer deze vervolgens uit om over te schakelen naar de
TargetDBdatabase waar u het aanvraagbericht ontvangt en een antwoordbericht terugstuurt naar deInitiatorDBdatabase.USE TargetDB; GO
De aanvraag ontvangen en een antwoord verzenden
Kopieer en plak de volgende code in een queryeditorvenster, voer deze uit om het antwoordbericht van targetQueue2DB te ontvangen en stuur een antwoordbericht terug naar de initiator. De
RECEIVEinstructie haalt het aanvraagbericht op. Vervolgens wordt in de volgendeSELECTinstructie de tekst weergegeven, zodat u kunt controleren of het hetzelfde bericht is dat in de vorige stap is verzonden. DeIFinstructie test of het ontvangen bericht een aanvraagberichttype is en of eenSENDinstructie wordt gebruikt om een antwoordbericht terug te sturen naar de initiator. Ook wordt getest of deEND CONVERSATIONinstructie wordt gebruikt om de doelzijde van het gesprek te beëindigen. In de laatsteSELECTinstructie wordt de tekst van het antwoordbericht weergegeven.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
Overschakelen naar de InitiatorDB-database
Kopieer en plak de volgende code in een queryeditorvenster. Voer deze vervolgens uit om de context terug te zetten naar de InitiatorDB-database waar u het antwoordbericht ontvangt en het gesprek beëindigt.
USE InitiatorDB; GO
Het antwoord ontvangen en het gesprek beëindigen
Kopieer en plak de volgende code in een queryeditorvenster. Voer het vervolgens uit om het antwoordbericht te ontvangen en het gesprek te beëindigen. De instructie
RECEIVEhaalt het antwoordbericht op uit InitiatorQueue2DB. DeEND CONVERSATIONinstructie beëindigt de initiatorzijde van het gesprek. In de laatsteSELECTinstructie wordt de tekst van het antwoordbericht weergegeven, zodat u kunt bevestigen dat het hetzelfde is als wat in de vorige stap is verzonden.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