共用方式為


第 3 課:開始交談和傳輸訊息

在這一課,您將學會在使用內部啟動預存程序設定的系統中,完成簡易要求回覆訊息循環。

程序

切換至 AdventureWorks 資料庫

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。然後,執行此程式碼以便將內容切換至 AdventureWorks 資料庫。

    USE AdventureWorks;
    GO
    

開始交談並傳送要求訊息

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。然後,執行此程式碼,以便啟動交談並將要求訊息傳送至 //AWDB/InternalAct/TargetService。此程式碼必須在單一區塊中執行,因為系統會使用變數,將對話控制代碼從 BEGIN DIALOG 傳遞至 SEND 陳述式。此批次會執行 BEGIN DIALOG 陳述式來啟動交談。它會建立要求訊息,然後使用 SEND 陳述式中的對話控制代碼,傳送該交談的要求訊息。最後一個 SELECT 陳述式會顯示已傳送之訊息的文字。

    DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RequestMsg NVARCHAR(100);
    
    BEGIN TRANSACTION;
    
    BEGIN DIALOG @InitDlgHandle
         FROM SERVICE
          [//AWDB/InternalAct/InitiatorService]
         TO SERVICE
          N'//AWDB/InternalAct/TargetService'
         ON CONTRACT
          [//AWDB/InternalAct/SampleContract]
         WITH
             ENCRYPTION = OFF;
    
    -- Send a message on the conversation
    SELECT @RequestMsg =
           N'<RequestMsg>Message for Target service.</RequestMsg>';
    
    SEND ON CONVERSATION @InitDlgHandle
         MESSAGE TYPE 
         [//AWDB/InternalAct/RequestMessage]
         (@RequestMsg);
    
    -- Diplay sent request.
    SELECT @RequestMsg AS SentRequestMsg;
    
    COMMIT TRANSACTION;
    GO
    

接收要求並傳送回覆

  • 當您傳送要求訊息時,Service Broker 會自動啟動 TargetActiveProc 的複本。此預存程序會從 TargetQueueIntAct 接收回覆訊息並將回覆訊息傳回起始端。

接收回覆並結束交談

  • 將下列程式碼複製並貼入 [查詢編輯器] 視窗中。然後,執行此程式碼以便接收回覆訊息並結束交談。RECEIVE 陳述式會從 InitiatorQueueIntAct 中擷取回覆訊息。END CONVERSATION 陳述式會結束交談的起始端,並將 EndDialog 訊息傳送至目標服務。最後一個 SELECT 陳述式會顯示回覆訊息的文字,如此您就可以確認它是否與上一個步驟中傳送的訊息相同。

    DECLARE @RecvReplyMsg NVARCHAR(100);
    DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER;
    
    BEGIN TRANSACTION;
    
    WAITFOR
    ( RECEIVE TOP(1)
        @RecvReplyDlgHandle = conversation_handle,
        @RecvReplyMsg = message_body
        FROM InitiatorQueueIntAct
    ), TIMEOUT 5000;
    
    END CONVERSATION @RecvReplyDlgHandle;
    
    -- Display recieved request.
    SELECT @RecvReplyMsg AS ReceivedReplyMsg;
    
    COMMIT TRANSACTION;
    GO
    

結束交談的目標端

  • 當您針對起始端執行 END CONVERSATION 陳述式時,Service Broker 就會將 EndDialog 訊息傳送至 TargetQueueIntAct 佇列。TargetActiveProc 程序會接收 EndDialog 訊息並發出結束交談之目標端的 END CONVERSATION。

後續步驟

您已成功完成 //AWDB/InternalAct/InitiatorService//AWDB/InternalAct/TargetService 之間的要求回覆訊息循環。您可以依照需要多次重複本課程中的步驟來傳輸訊息的要求回覆組。當您已完成 SEND 和 REPLY 陳述式的調查時,就可以卸除交談使用的所有物件。如需詳細資訊,請參閱<第 4 課:卸除交談物件>。