Lektion 5: Empfangen einer Anforderung und Senden einer Antwort

Neu: 15. September 2007

In dieser Lektion lernen Sie, wie eine Anforderungsnachricht von der Zielwarteschlange empfangen und eine Antwortnachricht an den Initiatordienst gesendet wird. Führen Sie diese Schritte mit einer Kopie von Management Studio aus, die auf dem gleichen Computer wie die Zielinstanz von Datenbankmodul ausgeführt wird.

Vorgehensweisen

Wechseln zur TargetDB-Datenbank

  1. Kopieren Sie den folgenden Code, und fügen Sie ihn in ein Abfrage-Editorfenster ein. Führen Sie ihn danach aus, um den Kontext zur InstTargetDB-Datenbank zu wechseln, wo Sie die Anforderungsnachricht empfangen und eine Antwortnachricht an die InstInitiatorDB senden.

    USE InstTargetDB;
    GO
    

Empfangen der Anforderung und Senden einer Antwort

  1. 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 InstTargetQueue zu empfangen und eine Antwortnachricht an den Initiator zu senden. Die RECEIVE-Anweisung ruft die Anforderungsnachricht ab. Anschließend wird durch folgende SELECT-Anweisung der Text angezeigt, so dass Sie überprüfen können, ob es dieselbe Nachricht ist, die im vorherigen Schritt gesendet wurde. Die IF-Anweisung testet, ob die empfangene Nachricht eine Anforderungsnachricht ist und ob eine SEND-Anweisung zum Senden einer 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 InstTargetQueue;
    
    SELECT @RecvReqMsg AS ReceivedRequestMsg;
    
    IF @RecvReqMsgName = N'//BothDB/2InstSample/RequestMessage'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
            N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
              (@ReplyMsg);
    
         END CONVERSATION @RecvReqDlgHandle;
    END
    
    SELECT @ReplyMsg AS SentReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

Nächste Schritte

Sie haben die Anforderungsnachricht erfolgreich empfangen und eine Antwortnachricht an den Initiatordienst gesendet. Als Nächstes empfangen Sie die Antwortnachricht von der Initiatorwarteschlange und beenden die Konversation. Siehe Lektion 6: Empfangen der Antwort und Beenden der Konversation.

Siehe auch

Andere Ressourcen

END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
WAITFOR (Transact-SQL)
Service Broker Programming Basics

Hilfe und Informationen

Informationsquellen für SQL Server 2005