Включение уведомлений запросов
Приложения, использующие уведомления о запросах, имеют общий набор требований. Чтобы поддерживать уведомления о запросах, источник данных 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.
Дальнейшие действия
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по