所有MSDN上的例子放在交易中發送和接收的語句。下面的腳本是http://msdn.microsoft.com/en-US/library/bb839499(v=sql.100).aspxSQL服務代理和交易
問題1:爲什麼所有的例子不使用begin try...end try begin catch...end catch
來處理異常?
問題2:如果消息消耗/處理需要多長時間?在SSB報表上進行長時間交易可以嗎?什麼是最好的方法?
問題3:如果消息名稱不是'//AWDB/1DBSample/RequestMessage'
,以下代碼不會結束對話。這是一個錯誤嗎?
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 TargetQueue1DB
), TIMEOUT 1000;
-- Process.... May take a long time
IF @RecvReqMsgName =
N'//AWDB/1DBSample/RequestMessage'
BEGIN
DECLARE @ReplyMsg NVARCHAR(100);
SELECT @ReplyMsg =
N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
SEND ON CONVERSATION @RecvReqDlgHandle
MESSAGE TYPE
[//AWDB/1DBSample/ReplyMessage]
(@ReplyMsg);
END CONVERSATION @RecvReqDlgHandle;
END
SELECT @ReplyMsg AS SentReplyMsg;
COMMIT TRANSACTION;