Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения, использующие уведомления о запросах, имеют общий набор требований. Чтобы поддерживать уведомления о запросах, источник данных SQL должен быть правильно настроен, а пользователь должен иметь соответствующие права доступа на стороне клиента и сервера.
Чтобы использовать уведомления о запросах, сделайте следующее.
- Включите уведомления о запросах для своей базы данных.
- Предоставьте идентификатору пользователя, используемому для подключения к базе данных, необходимые разрешения.
- Используйте объект SqlCommand для выполнения допустимой инструкции SELECT со связанным объектом уведомления: SqlDependency или SqlNotificationRequest.
- Укажите код для обработки уведомления в случае изменения отслеживаемых данных.
Требования к уведомлениям о запросах
Уведомления о запросах поддерживаются только для инструкций SELECT, которые соответствуют конкретным требованиям. В приведенной ниже таблице указаны ссылки на статьи о компоненте Service Broker и уведомлениях о запросах в электронной документации по SQL Server.
Документация SQL Server
- Создание запроса для уведомления
- Вопросы безопасности, связанные с компонентом Service Broker
- Защита и обеспечение безопасности (компонент Service Broker)
- Вопросы безопасности, связанные со службами уведомления
- Права доступа для уведомлений о запросах
- Вопросы интернационализации, связанные с компонентом Service Broker
- Рекомендации по проектированию решения (Service Broker)
- Информационный центр по компоненту Service Broker для разработчиков
- Руководство разработчика (Service Broker)
Настройка уведомлений о запросах для выполнения примера кода
Чтобы включить компонент Service Broker для базы данных AdventureWorks с помощью среды SQL Server Management Studio, выполните следующую инструкцию Transact-SQL.
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Для правильного запуска примеров уведомлений о запросах необходимо выполнить на сервере базы данных приведенные ниже инструкции Transact-SQL.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Разрешения на уведомления о запросах
Пользователям, выполняющим команды для запроса уведомлений, необходимо разрешение базы данных SUBSCRIBE QUERY NOTIFICATIONS на сервере.
Код на стороне клиента, выполняющийся в среде частичного доверия, требует наличия разрешения SqlClientPermission.
Следующий код создает объект SqlClientPermission, устанавливая для PermissionState значение Unrestricted. Demand вызывает исключение SecurityException во время выполнения, если ни одному из вызывающих методов выше в стеке вызовов не было предоставлено это разрешение.
using Microsoft.Data.SqlClient;
using System.Security.Permissions;
class Program
{
static void Main()
{
}
// Code requires directives to
// System.Security.Permissions and
// Microsoft.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
}
Выбор объекта уведомления
API-интерфейс уведомлений о запросах предоставляет два объекта для обработки уведомлений: SqlDependency и SqlNotificationRequest.
Использование SqlDependency
Чтобы вы могли использовать объект SqlDependency, в используемой базе данных SQL Server должен быть включен компонент Service Broker, а пользователи должны иметь права для получения уведомлений. Объекты компонента Service Broker, такие как очередь уведомлений, предопределены.
Кроме того, объект SqlDependency автоматически запускает рабочий поток для обработки уведомлений по мере их помещения в очередь. Он также анализирует сообщение Service Broker, предоставляя сведения в виде данных аргумента события.
SqlDependency должен быть инициализирован путем вызова метода Start, чтобы установить зависимость от базы данных.
Start — это статический метод, который необходимо вызывать только один раз во время инициализации приложения для каждого требуемого подключения к базе данных. Метод Stop следует вызывать при завершении работы приложения для каждого установленного соединения с зависимостью.
Использование SqlNotificationRequest
Напротив, SqlNotificationRequest требует, чтобы вы самостоятельно реализовали всю инфраструктуру для прослушивания. Кроме того, необходимо определить все поддерживающие объекты компонента Service Broker, такие как очередь, служба и типы сообщений, поддерживаемые очередью. Этот ручной подход полезен, если для вашего приложения требуются специальные сообщения с уведомлениями или параметры уведомлений или же если ваше приложение является частью более крупного приложения Service Broker.