Lektion 5: Empfangen einer Anforderung und Senden einer Antwort

In dieser Lektion erfahren Sie, wie Sie eine Anforderungsnachricht von der Zielwarteschlange erhalten und eine Antwortnachricht an den Initiatordienst senden. Führen Sie diese Schritte von einer Kopie von Management Studio aus, die auf demselben Computer ausgeführt wird wie die Zielinstanz von Database Engine (Datenbankmodul).

Verfahrensweisen

Wechseln zur TargetDB-Datenbank

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Führen Sie den Code anschließend aus, um den Kontext zur InstTargetDB-Datenbank zu wechseln, in der Sie die Anforderungsnachricht erhalten und eine Antwortnachricht an InstInitiatorDB senden.

    USE InstTargetDB;
    GO
    

Empfangen der Anforderung und Senden einer Antwort

  • Kopieren Sie den folgenden Code, und fügen Sie ihn in einem Abfrage-Editorfenster ein. Führen Sie den Code anschließend aus, um die Antwortnachricht von InstTargetQueue zu empfangen und eine Antwortnachricht an den Initiator zu senden. Die RECEIVE-Anweisung ruft die Anforderungsnachricht ab. Anschließend zeigt die folgende SELECT-Anweisung den Text an, sodass Sie prüfen können, ob es sich um dieselbe Nachricht handelt, die im vorherigen Schritt gesendet wurde. Die IF-Anweisung prüft, ob die empfangene Nachricht eine Anforderungsnachricht ist. Wenn dies der Fall ist, wird mithilfe einer SEND-Anweisung eine Antwortnachricht an den Initiator gesendet. 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;
    
    WAITFOR
    ( RECEIVE TOP(1)
        @RecvReqDlgHandle = conversation_handle,
        @RecvReqMsg = message_body,
        @RecvReqMsgName = message_type_name
      FROM InstTargetQueue
    ), TIMEOUT 1000;
    
    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. Anschließend empfangen Sie die Antwortnachricht von der Initiatorwarteschlange und beenden die Konversation. Siehe Lektion 6: Empfangen der Antwort und Beenden der Konversation.