Я использую SqlDependency в приложении .NET 3.5 более 3 лет без каких-либо проблем. Сценарий следующий:
- Центральная служба Windows с SqlDependency просмотр таблицы (назовем ее Таблица A)
- Несколько пользователей используют приложение WPF с уникальным SqlDependency для каждого пользователя, просматривающего таблицу (снова таблица A)
- Пользователь ставит в очередь единицу работы для обработки в таблице A.
- SqlDependency срабатывает на службе окон
- Служба Windows обрабатывает все незавершенные элементы в таблице A и сохраняет результаты в таблице A.
- Уникальные срабатывания SqlDependency для каждого пользователя, чьи результаты доступны
- Пользователь обрабатывает свою работу
Недавно я обновил систему до .NET 4.5 и начал замечать проблемы, когда изменения вносились в отслеживаемую нами таблицу, но SqlDependency никогда не сработает (как в службе, так и в пользовательском приложении). Я начал копаться в этом дальше и заметил в своих журналах, что в какой-то момент я перерегистрирую SqlDependency, но после этого уведомление никогда не сработает.
Увидев такое поведение, я решил запустить профилировщик на сервере SQL для захвата событий подписки. Из полученных данных я заметил, что иногда подписка регистрируется (с уникальным идентификатором) одним пользователем, но затем активируется (с тем же уникальным идентификатором) другим пользователем. Обычно это происходит с упомянутой выше службой и одним или несколькими пользователями приложения WPF. (Я приложил скриншот проблемы в результатах профайлера)
Это ожидаемое поведение? Что уведомление может быть запущено для другого пользователя, чем оно было зарегистрировано? Указывает ли это на проблему на прикладном уровне? Любая помощь приветствуется.