Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Neu: 15. September 2007
In dieser Lektion lernen Sie, eine Konversation zu starten, einen einfachen Anforderung/Antwort-Nachrichtenzyklus durchzuführen und anschließend die Konversation zu beenden.
Vorgehensweisen
Wechseln zur AdventureWorks-Datenbank
Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, um den Kontext zur Datenbank AdventureWorks zu wechseln.
USE AdventureWorks; GO
Starten einer Konversation und Senden einer Anforderungsnachricht
Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, um eine Konversation zu starten und eine Anforderungsnachricht an //AWDB/1DBSample/TargetService zu senden. Der Code muss in einem Block ausgeführt werden, weil eine Variable zum Weiterleiten eines Dialoghandles von der BEGIN DIALOG-Anweisung zur SEND-Anweisung verwendet wird. Der Batch führt die BEGIN DIALOG-Anweisung aus, um die Konversation zu starten. Es wird eine Anforderungsnachricht erstellt und anschließend mithilfe des Dialoghandles in einer SEND-Anweisung die Anforderungsnachricht in dieser Konversation gesendet. Die letzte SELECT-Anweisung zeigt den Text der gesendeten Nachricht an.
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
Empfangen der Anforderung und Senden einer Antwort
Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn danach aus, um die Antwortnachricht aus TargetQueue2DB zu empfangen und eine Antwortnachricht an den Initiator zu senden. Die RECEIVE-Anweisung ruft die Anforderungsnachricht ab. Durch folgende SELECT-Anweisung wird der Text angezeigt, so dass Sie überprüfen können, ob es dieselbe Nachricht ist, die im letzten Schritt gesendet wurde. Die IF-Anweisung testet, ob die empfangene Nachricht eine Anforderungsnachricht ist und ob eine SEND-Anweisung zum Senden der Antwortnachricht an den Initiator verwendet wurde. Die END CONVERSATION-Anweisung wird verwendet, um die Zielseite der Konversation zu beenden. Die abschließende SELECT-Anweisung zeigt den Text der Antwortnachricht an.
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
Empfangen der Antwort und Beenden der Konversation
Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn dann aus, die Antwortnachricht zu empfangen und die Konversation zu beenden. Die RECEIVE-Anweisung ruft die Antwortnachricht von InitiatorQueue2DB ab. Die END CONVERSATION-Anweisung beendet die Initiatorseite der Konversation. Die letzte SELECT-Anweisung zeigt den Text der Antwortnachricht an. Sie können so sicherstellen, dass sie mit der im vorherigen Schritt gesendeten übereinstimmt.
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
Nächste Schritte
Sie haben erfolgreich einen Anforderung/Antwort-Nachrichtenzyklus zwischen //AWDB/1DBSample/InitiatorService und //AWDB/1DBSample/TargetService durchgeführt. Sie können die Schritte in dieser Lektion so oft wiederholen, wie Sie ein Anforderung/Antwort-Nachrichtenpaar übertragen möchten. Wenn Sie die SEND- und REPLY-Anweisungen untersucht haben, können Sie alle von dieser Konversation verwendeten Objekte löschen. Weitere Informationen finden Sie unter Lektion 3: Löschen der Konversationsobjekte.
Siehe auch
Andere Ressourcen
BEGIN DIALOG CONVERSATION (Transact-SQL)
SEND (Transact-SQL)
RECEIVE (Transact-SQL)
END CONVERSATION (Transact-SQL)
Service Broker Programming Basics