レッスン 5 : 要求の受信と応答の送信

このレッスンでは、発信先キューから要求メッセージを受信し、発信側サービスに応答メッセージを送信する方法を学習します。これらの手順は、データベース エンジンの発信先インスタンスと同じコンピュータで実行されている Management Studio のコピーから実行してください。

手順

TargetDB データベースへの切り替え

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、コンテキストを InstTargetDB データベースに切り替えます。このデータベースで要求メッセージを受信し、応答メッセージを InstInitiatorDB に返信します。

    USE InstTargetDB;
    GO
    

要求の受信と応答の送信

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、InstTargetQueue から応答メッセージを受信して、発信側に応答メッセージを返信します。RECEIVE ステートメントは要求メッセージを取得します。次に、SELECT ステートメントでテキストを表示し、前の手順で送信したメッセージと同じメッセージであることを確認できるようにします。IF ステートメントは、受信したメッセージが要求メッセージ型であるかどうか、および応答メッセージを発信側に返信するために SEND ステートメントを使用するかどうかをテストします。発信先でのメッセージ交換を終了するには、END CONVERSATION ステートメントを使用します。最後の SELECT ステートメントは、応答メッセージのテキストを表示します。

    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
    

次の手順

これで要求メッセージを適切に受信し、発信側サービスに応答メッセージを送信できました。次に、発信側キューから応答メッセージを受信し、メッセージ交換を終了します。「レッスン 6 : 応答の受信とメッセージ交換の終了」を参照してください。