Подтвердить что ты не робот

Уведомление об изменении с помощью Sql Server 2008

У меня есть приложение, состоящее из базы данных и нескольких служб. Одна из этих служб добавляет информацию в базу данных (инициируется пользователем).

Другая служба периодически запрашивает базы данных для изменений и использует новые данные в качестве входных данных для обработки.

До сих пор я использовал настраиваемый таймер, который запрашивает базу данных каждые 30 секунд или около того. Я прочитал о Sql 2005 с уведомлением об изменениях. Однако в Sql 2008 эта функция устарела.

Каков наилучший способ получения уведомлений об изменениях, произошедших в базе данных непосредственно в коде? Каковы наилучшие методы?

4b9b3361

Ответ 1

Notification Services была устарела, но вы все равно не хотите ее использовать.

Вы можете рассматривать сообщения Service Broker в некоторых сценариях; детали зависят от вашего приложения.

В большинстве случаев вы, вероятно, можете использовать SqlDependency или SqlCacheDependency. Их работа заключается в том, что вы включаете объект SqlDependency с вашим запросом при его выпуске. Запрос может быть одним SELECT или сложной группой команд в хранимой процедуре.

Когда-нибудь позже, если другой веб-сервер или пользователь или веб-страница внесут изменения в БД, которые могут привести к изменению результатов предыдущего запроса, SQL Server отправит уведомление всем серверам, которые зарегистрировали объекты SqlDependency. Вы можете либо зарегистрировать код для запуска при поступлении этих событий, либо событие может просто очистить запись в кэше.

Хотя вам необходимо включить Service Broker для использования SqlDependency, вам не нужно явно взаимодействовать с ним. Однако вы также можете использовать его в качестве альтернативного механизма; подумайте об этом как о постоянной системе обмена сообщениями, которая гарантирует порядок сообщений и доставку только один раз.

Сведения о том, как использовать эти системы, немного длинны для сообщения на форуме. Вы можете либо использовать Google для них, либо я также приводил примеры в моей книге (Ultra-Fast ASP.NET).

Ответ 2

Да, в этом сообщении в блоге объясняется, что Notification Services теперь устарела, а также какие замены или альтернативы идут вперёд.

В ваших целях - получение уведомлений об изменениях, произошедших в dataase - похоже, что вы хотите отслеживание изменений SQL Server. Но уведомление является моделью тянуть - ваше приложение должно выполнить запрос в таблице изменений.

Мне не удалось выяснить, продолжает ли SqlDependency работать с Notification Services устаревшим.

Ответ 3

Существует несколько способов отслеживания изменений в базе данных: триггеры, которые поддерживают временные структуры, такие как отставания, журналы отслеживания (например, таблицы аудита) или использование средств отслеживания изменений в SQL 2008 в качестве ссылок в другой ответ. Независимо от того, какой механизм вы используете, у вас есть проблема с уведомлением вашего доморощенного сервиса об изменении. Для этого вы можете использовать Service Broker и активацию на основе событий. Из того, что вы описываете, похоже, что приложение ожидает события из очереди. http://msdn.microsoft.com/en-us/library/ms171581.aspx

Если вы не хотите, чтобы служба зависала и спала в очереди, вы можете изучить возможность включения службы в жизнь "по требованию" с помощью внешнего механизма активации в сервис-брокере.

Ответ 4

Вы можете использовать System.Data.SqlClient.SqlDependency(который работает с Service Broker on), чтобы подписаться на изменения в таблице.