Создание подписок на уведомления запроса

Создание подписки на уведомление заключается в создании команды, присоединении к ней запроса на уведомление и выполнении команды. Подписки на уведомление запроса должны быть созданы из интерфейса доступа базы данных. Язык Transact-SQL не предоставляет механизма создания подписок на уведомление запроса.

Компонент Database Engine немедленно регистрирует в команде уведомление для инструкции языка Transact-SQL. Для каждой инструкции, не отвечающей требованиям для уведомлений запроса, компонент Database Engine немедленно создает уведомление. Для инструкций, отвечающих требованиям, создается подписка. Соблюдайте осторожность во избежание отправки команды на сервер, содержащий как инструкции, отвечающие требованиям, так и инструкции, не отвечающие обоим требованиям.

ms188669.note(ru-ru,SQL.90).gifПримечание.
Язык Transact-SQL не предусматривает способ для подписки на уведомления. Классы среды CLR для доступа к данным, расположенные на сервере SQL Server, не поддерживают уведомления о запросах.

Каждая подписка на уведомление запроса создает одно уведомление о событии. После возникновения уведомления сервер SQL Server удаляет подписку на уведомление. Поэтому приложение, которое снова нуждается в уведомлении, должно запросить новое уведомление при помощи команды, извлекающей измененные данные.

Требование уведомления запроса не является транзакционным. При запросе уведомления командой компонент Database Engine регистрирует, проводится ли фиксация или откат транзакции, содержащей команду.

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

Выбор стратегии подписки на уведомление при помощи поставщика SqlClient Managed Provider

Подписку на уведомление можно запросить двумя способами. Зависимость предоставляет высокоуровневый интерфейс для уведомлений запроса. Приложение просто создает экземпляр класса зависимости (например, экземпляр SqlDependency в ADO.NET), регистрирует обработчик для получения уведомлений о событии и добавляет объект зависимости к запросу команды. При возникновении уведомления объект зависимости вызывает обработчик.

Запрос уведомления предоставляет уведомлениям запроса более гибкий интерфейс более низкого уровня. Подобно зависимости, приложение создает запрос уведомления (например, экземпляр SqlNotificationRequest в ADO.NET) и присоединяет запрос уведомления к запросу команды. В отличие от зависимости, запрос уведомления просто запрашивает подписку на уведомление для запроса. Само приложение должно извлекать сообщения уведомления из базы данных, обрабатывать их и реагировать соответствующим образом. Это делает конструкцию приложения более гибкой, но требует немного больших усилий. Запрос уведомления подходит для приложения, которое требует гибкости в обработке уведомлений. Например, приложение, которое запускается по расписанию, не может использовать зависимость, поскольку объект зависимости разрушается, когда приложение завершает работу. Однако приложение может проверять очередь на запуск и при необходимости обновлять кэш локальных данных при помощи запроса уведомления.

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

Использование SOAP для уведомлений

Собственная поддержка HTTP SOAP включает в себя поддержку уведомлений о запросах. Запрос SOAP, включающий в себя заголовок <notificationRequest>, создает подписку на уведомления для запроса. Как и с SqlNotificationRequest, запросивший должен получать сообщения уведомления из базы данных, обрабатывать их и реагировать соответствующим образом. Этот метод хорошо подходит для приложений веб-служб, поскольку он не запрашивает постоянного соединения с SQL Server.

Использование для уведомлений собственного клиента SQL Server

Приложения, использующие поставщик OLE DB для собственного клиента SQL Server или драйвер ODBC, также могут передавать запросы уведомлений. Дополнительные сведения о работе уведомлений о запросах в приложениях, использующих собственный клиент SQL Server, см. в разделе Working with Query Notifications.

См. также

Основные понятия

Основные сведения об условиях выдачи уведомлений о запросах
Использование объекта SqlDependency для подписки на уведомления о запросах
Использование объекта SqlNotificationRequest для подписки на уведомления о запросах

Справка и поддержка

Получение помощи по SQL Server 2005