私は.NET 3.5 アプリケーションでSqlDependencyを 3 年以上問題なく使用しています。シナリオは次のとおりです。
- テーブルを監視するSqlDependencyを持つ中央の Windows サービス(これをテーブル A と呼びましょう)
- テーブルを監視しているユーザーごとに一意のSqlDependencyを持つ WPF アプリケーションを使用する複数のユーザー(再びテーブル A)
- ユーザーは、表 A で処理する作業単位をキューに入れます
- Windows サービスでSqlDependencyが発生する
- Windows サービスは、テーブル A のすべての未処理のアイテムを処理し、結果をテーブル A に保存します。
- 結果が利用可能なユーザーごとに一意の SqlDependency が発生します
- ユーザーが作業を処理する
最近、システムを .NET 4.5 にアップグレードしたところ、監視しているテーブルに変更が加えられるという問題が発生し始めましたが、SqlDependencyは (サービスとユーザー アプリケーションの両方で) 発生しません。私はこれをさらに掘り下げ始め、ログで、ある時点でSqlDependencyを再登録することに気付きましたが、その後は通知が発生しませんでした。
この動作を確認した後、SQL サーバーでプロファイラーを実行して、サブスクリプション イベントをキャプチャすることにしました。取得したデータから、サブスクリプションが 1 人のユーザーによって (一意の ID で) 登録された後、別のユーザーによって (同じ一意の ID で) 起動されることがあることに気付きました。これは通常、前述のサービスと、WPF アプリケーションの 1 人以上のユーザーで発生します。(プロファイラーの結果に問題のスクリーンショットを添付しました)
これは予想される動作ですか?登録されたユーザーとは異なるユーザーに対して通知を発行できるということですか? これは、アプリケーション層の問題を示していますか? どんな助けでも大歓迎です。