2012-01-25 13 views
0

SQL Service Broker(SSB)を習得しようとしていますが、MSDNの簡単なチュートリアルから始めます。私は "Completing a Conversation Between Databases"を見ています。要求メッセージと応答メッセージは、イニシエータとターゲットデータベースに設定され、これらのメッセージを使用する両方のdbsに関する契約、キューを使用するイニシエータdbのサービス、およびキューと契約を使用するターゲット上のサービスがあります。Service Brokerチュートリアル - 対象のデータベースに関する会話を残しました

イニシエータは、ダイアログを開始して、ターゲットサービスにメッセージを送信します。ターゲットはこのメッセージをピックアップして応答を送信し(そしてEND CONVERSATIONと呼ぶ)、最後にイニシエータは応答をピックアップし、END CONVERSATIONも呼び出します。

イニシエータでSELECT * FROM sys.conversation_endpointsを実行すると、行は返されません。ただし、ターゲットデータベースに返される行があります。会話はCLOSEDの状態です。

これは正しいですか(つまり、ターゲットデータベースはまだこの会話を保存していますか)。そうでない場合は、どのようにして目標データベースの会話を取り除くことができますか?それが正しい場合、これらの会話はいつ消えますか?

これは要求をピックアップし、応答を送信DBターゲットのためのコードである:

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 

COMMIT TRANSACTION; 
GO 

答えて

1

ターゲットエンドポイントがリプレイ攻撃を防ぐために30分遅れて除去されます。 sys.conversation_endpoint.security_timestampはCLOSEDエンドポイントに設定されていますか?

+0

ああOKターゲットdbのsecurity_timestamp列には、会話が終了してから30分後の日時があります。だからこれはいつ削除されますか? –

+0

このタイムスタンプより前に削除されます。 –

+0

これをクリアしていただきありがとうございます。 –

0

Remusに加えて詳しい説明:会話が正常に完了できない場合は、security_timestampを超えてまだsys.conversation_endpointに表示されます。手動での会話を削除するには、一意の識別子sys.conversation_endpoint.conversation_handle(すなわち94798AB6-DF37-E211-BF0F-002215A14A37)を使用することができ、このような場合:

END CONVERSATION conversation_handle WITH CLEANUP 

WITH CLEANUPが重要であり、MSDNを参照してください。END CONVERSATION (Transact-SQL)

関連する問題