Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения, использующие уведомления о запросах, имеют общий набор требований. Источник данных должен быть правильно настроен для поддержки уведомлений SQL- запросов, а пользователь должен иметь правильные разрешения на стороне клиента и сервера.
Чтобы использовать уведомления о запросах, необходимо:
Включите уведомления о запросах для базы данных.
Убедитесь, что идентификатор пользователя, используемый для подключения к базе данных, имеет необходимые разрешения.
Используйте объект SqlCommand для выполнения допустимой инструкции SELECT с соответствующим объектом уведомления — либо SqlDependency, либо SqlNotificationRequest.
Предоставьте код для обработки уведомления, если отслеживаемые данные изменяются.
Требования к уведомлениям о запросах
Уведомления о запросах поддерживаются только для инструкций SELECT, которые соответствуют списку конкретных требований. В следующей таблице приведены ссылки на документацию по Service Broker и уведомлениям о запросах в документации ПО SQL Server.
Документация SQL Server
Включение уведомлений запросов для запуска примера кода
Чтобы включить 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 произойдет во время выполнения, если все вызывающие функции выше по стеку вызовов не имеют разрешения.
// Code requires directives to
// System.Security.Permissions and
// System.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
' Code requires directives to
' System.Security.Permissions and
' System.Data.SqlClient
Private Function CanRequestNotifications() As Boolean
Dim permission As New SqlClientPermission( _
PermissionState.Unrestricted)
Try
permission.Demand()
Return True
Catch ex As Exception
Return False
End Try
End Function
Выбор объекта уведомления
API уведомлений запросов предоставляет два объекта для обработки уведомлений: SqlDependency и SqlNotificationRequest. Как правило, большинство приложений не-ASP.NET должны использовать объект SqlDependency. ASP.NET приложения должны использовать более высокий уровень SqlCacheDependency, который упаковывает SqlDependency и предоставляет платформу для администрирования объектов уведомлений и кэша.
Использование SqlDependency
Для использования SqlDependencyкомпонент Service Broker должен быть включен для используемой базы данных SQL Server, и у пользователей должны быть разрешения на получение уведомлений. Объекты Service Broker, такие как очередь уведомлений, предопределены.
Кроме того, SqlDependency автоматически запускает рабочий поток для обработки уведомлений по мере их публикации в очереди; он также анализирует сообщение Service Broker, предоставляя сведения в виде данных аргумента события.
SqlDependency необходимо инициализировать путем вызова Start
метода для установления зависимости в базе данных. Это статический метод, который необходимо вызывать только один раз во время инициализации приложения для каждого подключения к базе данных. Метод Stop
должен вызываться при завершении приложения для каждого соединения зависимостей, которое было сделано.
Использование SqlNotificationRequest
Напротив, SqlNotificationRequest вам нужно реализовать всю инфраструктуру прослушивания вручную. Кроме того, необходимо определить все вспомогательные объекты Service Broker, такие как очередь, служба и типы сообщений, поддерживаемые очередью. Этот подход вручную полезен, если приложению требуются специальные сообщения уведомлений или поведение уведомлений, или если ваше приложение является частью более крупного приложения Service Broker.