2

Service Broker を使用して、あるデータベースから別のデータベースにメッセージを転送するアプリケーションを開発しています。 SourceDBは、一部のデータを吸い上げている既存のアプリケーションによって使用されます。 TargetDBはこのアプリケーションでのみ使用され、必要なデータを処理/配布します。1 種類の契約のみを使用しており、両方の DB が同じサーバー上にあります。

両方、およびそれぞれのイニシエーターとターゲット キュー/サービスで同一のメッセージ タイプとコントラクトを設定しました。両方のデータベースで:

  • ENABLE_BROKER設定されています
  • TRUSTWORTHY設定されています
  • ユニークなservice_broker_guid
  • データベースの所有者として、必要に応じsaて、すべての SSB 承認ステートメントがdboまたはである。OWNER

ただし、SourceDB からメッセージを送信すると、次のようになります。

BEGIN DIALOG CONVERSATION @dialogHandle
    FROM SERVICE [//Service/Initiator]
    TO SERVICE N'//Service/Target'
    ON CONTRACT [//Contract/Notification]
    WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @dialogHandle
    MESSAGE TYPE [//Message/Notification] (@RequestMsg);

...メッセージはそこに届きません。さらに調査すると、次のことがわかります。

  • イニシエータ キューが空です
  • ターゲット キューが空です (注: 必要があるという問題ではありませんRECEIVE)
  • 伝送キューが空です
  • SQL Server ログにも、メッセージを作成するストアド プロシージャの CATCH エラー処理にも、エラーは記録されません。
  • sys.dm_broker_queue_monitorsアクティブ化が有効になっている場合、SourceDB のイニシエーター キューのエントリは NOTIFIEDに​​設定されます。
  • SourceDB の状態sys.conversation_endpointsに新しいエントリがありますCONVERSING
  • sys.dm_broker_queue_monitorsアクティブ化が有効になっている場合、TargetDB のターゲット キューのエントリは INACTIVE のままです。
  • TargetDBには、 SourceDB のエントリと同じ conversation_id と異なる conversation_handle を持つ状態sys.conversation_endpointsの新しいエントリがありますCONVERSING

テスト データベースは SQL 2005 (アプリケーションは 2005 をサポートする必要があります) ですが、開発マシンの 2008 インストールから ssbdiagnose ユーティリティを実行して問題を診断しました。

ssbdiagnose -S testserver -d SourceDB CONFIGURATION FROM SERVICE //Service/Initiator TO SERVICE //Service/Target ON CONTRACT //Contract/Notification

それは以下を生み出しました:

D  29912 dbtestsvr  SourceDB  Service //Service/Target was not found
D  29975 dbtestsvr  SourceDB  User dbo does not have SEND permission on service //Service/Target

これは混乱を招きます。これは、dboアクセス権を拒否するべきではなく//Service/Target、別のデータベースではあるものの、確かに存在するためです。//Service/Targetしかし、私の同僚は、 SourceDBを探してコマンドが実行されていることを示す Profiler トレースを実行しました。Service Broker はどうやら混乱しているようです。理論的に不要であることに加えて、明示的なルートを追加しても状況は変わりません。

テストサーバーでほぼ同じ一連のチュートリアルコマンドを実行しましたが、すべて正常に機能したため、db 固有のものである可能性があります。

私たちのセットアップは 2 日前に機能していたので、おそらく変更された可能性のある設定を探していますが、うまくいきません。

4

0 に答える 0