次の方法で共有


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

新規 : 2007 年 9 月 15 日

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

手順

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

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

    USE InstTargetDB;
    GO
    

要求の受信と応答の送信

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

    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
    

次の手順

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

参照

その他の技術情報

END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
WAITFOR (Transact-SQL)
Service Broker のプログラミングの基礎

ヘルプおよび情報

SQL Server 2005 の参考資料の入手