第 4 課:開始交談和傳輸訊息
在這一課,您將學會啟動跨越相同 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 資料庫,如此您就可以在其中接收要求訊息並將回覆訊息傳送回 InitiatorDB。
USE TargetDB; GO
接收要求並傳送回覆
將下列程式碼複製並貼入 [查詢編輯器] 視窗中。然後,執行此程式碼以便從 TargetQueue2DB 接收回覆訊息並將回覆訊息傳送回起始端。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 TargetQueue2DB ), TIMEOUT 1000; 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; WAITFOR ( RECEIVE TOP(1) @RecvReplyDlgHandle = conversation_handle, @RecvReplyMsg = message_body FROM InitiatorQueue2DB ), TIMEOUT 1000; END CONVERSATION @RecvReplyDlgHandle; -- Display recieved request. SELECT @RecvReplyMsg AS ReceivedReplyMsg; COMMIT TRANSACTION; GO
後續的步驟
這總結教學課程。教學課程僅是簡介,不會描述全部的可用選項。教學課程使用精簡邏輯及錯誤處理,無法在實際執行環境中使用。若要建立有效率、可靠及健全的交談,您需要比此教學課程中更複雜的程式碼。