第 4 課:開始交談並傳輸訊息
新增: 2007 年 9 月 15 日
在本課程中,您將學習啟動跨越相同 Database Engine 執行個體上兩個資料庫的交談。您還會學習如何完成簡單的要求-回覆訊息循環,然後結束交談。
程序
切換至 InitiatorDB 資料庫
複製下列程式碼並在 [查詢編輯器] 視窗中貼上,然後執行,即可將內容切換為 InitiatorDB 資料庫,而您會在這裡啟始交談。
USE InitiatorDB; GO
開始交談並傳送要求訊息
複製下列程式碼並在 [查詢編輯器] 視窗中貼上,然後執行,即可開始交談並傳送要求訊息至 TargetDB 中的 //TgtDB/2DBSample/TargetService。因為會使用變數將對話控制代碼從 BEGIN DIALOG 傳遞至 SEND 陳述式,所以必須在同一個區塊中執行程式碼。有一個批次會執行 BEGIN DIALOG 陳述式,以開始交談並建立要求訊息。然後在 SEND 陳述式中使用對話控制代碼,對此交談傳送要求訊息。最後的 SELECT 陳述式會顯示所傳送的訊息的文字。
DECLARE @InitDlgHandle UNIQUEIDENTIFIER; DECLARE @RequestMsg NVARCHAR(100); BEGIN TRANSACTION; BEGIN DIALOG @InitDlgHandle FROM SERVICE [//InitDB/2DBSample/InitiatorService] TO SERVICE N'//TgtDB/2DBSample/TargetService' ON CONTRACT [//BothDB/2DBSample/SimpleContract] WITH ENCRYPTION = OFF; SELECT @RequestMsg = N'<RequestMsg>Message for Target service.</RequestMsg>'; SEND ON CONVERSATION @InitDlgHandle MESSAGE TYPE [//BothDB/2DBSample/RequestMessage] (@RequestMsg); SELECT @RequestMsg AS SentRequestMsg; COMMIT TRANSACTION; GO
切換至 TargetDB 資料庫
複製下列程式碼並在 [查詢編輯器] 視窗中貼上,然後執行,即可將內容切換為 TargetDB 資料庫,而您會在這裡接收要求訊息並將回覆訊息傳回 TargetDB。
USE TargetDB; GO
接收要求並傳送回覆
複製下列程式碼並在 [查詢編輯器] 視窗中貼上,然後執行,即可從 TargetQueue2DB 接收回覆訊息,並將回覆訊息傳送回起始端。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 TargetQueue2DB; SELECT @RecvReqMsg AS ReceivedRequestMsg; IF @RecvReqMsgName = N'//BothDB/2DBSample/RequestMessage' BEGIN DECLARE @ReplyMsg NVARCHAR(100); SELECT @ReplyMsg = N'<ReplyMsg>Message for Initiator service.</ReplyMsg>'; SEND ON CONVERSATION @RecvReqDlgHandle MESSAGE TYPE [//BothDB/2DBSample/ReplyMessage] (@ReplyMsg); END CONVERSATION @RecvReqDlgHandle; END SELECT @ReplyMsg AS SentReplyMsg; COMMIT TRANSACTION; GO
切換至 InitiatorDB 資料庫
複製下列程式碼並在 [查詢編輯器] 視窗中貼上,然後執行,即可將內容切換回 InitiatorDB 資料庫,而您會在這裡接收回覆訊息並結束交談。
USE InitiatorDB; GO
接收回覆並結束交談
複製下列程式碼並在 [查詢編輯器] 視窗中貼上,然後執行,即可接收回覆訊息並結束交談。RECEIVE 陳述式會擷取來自 InitiatorQueue2DB 的回覆訊息。END CONVERSATION 陳述式會結束交談的起始端。最後的 SELECT 陳述式會顯示回覆訊息的文字,以便您確認是否和上一個步驟中傳送的訊息相同。
DECLARE @RecvReplyMsg NVARCHAR(100); DECLARE @RecvReplyDlgHandle UNIQUEIDENTIFIER; BEGIN TRANSACTION; RECEIVE TOP(1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue2DB; END CONVERSATION @RecvReplyDlgHandle; -- Display recieved request. SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
後續的步驟
本教學課程到此結束。教學課程只是簡要的概觀,並未描述所有可用的選項。教學課程提供簡化的邏輯和錯誤處理,目的在讓您專注於基本的作業。若要建立可靠有效率的完善交談,您需要使用比本教學課程中的範例更為複雜的程式碼。
回到 Service Broker 教學課程
請參閱
其他資源
BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
WAITFOR (Transact-SQL)
Service Broker Programming Basics