42

私は.NET 3.5 アプリケーションでSqlDependencyを 3 年以上問題なく使用しています。シナリオは次のとおりです。

  1. テーブルを監視するSqlDependencyを持つ中央の Windows サービス(これをテーブル A と呼びましょう)
  2. テーブルを監視しているユーザーごとに一意のSqlDependencyを持つ WPF アプリケーションを使用する複数のユーザー(再びテーブル A)
  3. ユーザーは、表 A で処理する作業単位をキューに入れます
  4. Windows サービスでSqlDependencyが発生する
  5. Windows サービスは、テーブル A のすべての未処理のアイテムを処理し、結果をテーブル A に保存します。
  6. 結果が利用可能なユーザーごとに一意の SqlDependency が発生します
  7. ユーザーが作業を処理する

最近、システムを .NET 4.5 にアップグレードしたところ、監視しているテーブルに変更が加えられるという問題が発生し始めましたが、SqlDependencyは (サービスとユーザー アプリケーションの両方で) 発生しません。私はこれをさらに掘り下げ始め、ログで、ある時点でSqlDependencyを再登録することに気付きましたが、その後は通知が発生しませんでした。

この動作を確認した後、SQL サーバーでプロファイラーを実行して、サブスクリプション イベントをキャプチャすることにしました。取得したデータから、サブスクリプションが 1 人のユーザーによって (一意の ID で) 登録された後、別のユーザーによって (同じ一意の ID で) 起動されることがあることに気付きました。これは通常、前述のサービスと、WPF アプリケーションの 1 人以上のユーザーで発生します。(プロファイラーの結果に問題のスクリーンショットを添付しました)

これは予想される動作ですか?登録されたユーザーとは異なるユーザーに対して通知を発行できるということですか? これは、アプリケーション層の問題を示していますか? どんな助けでも大歓迎です。

プロファイラーの結果

4

1 に答える 1