Włączanie powiadomień o zapytaniach
Aplikacje, które korzystają z powiadomień o zapytaniach, mają wspólny zestaw wymagań. Źródło danych musi być poprawnie skonfigurowane do obsługi powiadomień dotyczących zapytań SQL, a użytkownik musi mieć odpowiednie uprawnienia po stronie klienta i po stronie serwera.
Aby korzystać z powiadomień dotyczących zapytań, musisz:
Włącz powiadomienia dotyczące zapytań dla bazy danych.
Upewnij się, że identyfikator użytkownika używany do nawiązywania połączenia z bazą danych ma niezbędne uprawnienia.
SqlCommand Użyj obiektu, aby wykonać prawidłową instrukcję SELECT ze skojarzonym obiektem powiadomienia — SqlDependency albo SqlNotificationRequest.
Podaj kod, aby przetworzyć powiadomienie, jeśli monitorowane dane zmieniają się.
Wymagania dotyczące powiadomień dotyczących zapytań
Powiadomienia o zapytaniach są obsługiwane tylko w przypadku instrukcji SELECT, które spełniają listę określonych wymagań. Poniższa tabela zawiera linki do dokumentacji usługi Service Broker i powiadomień zapytań w dokumentacji programu SQL Server.
SQL Server documentation (Dokumentacja programu SQL Server)
Zagadnienia dotyczące międzynarodowych zagadnień dotyczących brokera usług
Zagadnienia dotyczące projektowania rozwiązań (Service Broker)
Włączanie powiadomień zapytań w celu uruchomienia przykładowego kodu
Aby włączyć usługę Service Broker w bazie danych AdventureWorks przy użyciu programu SQL Server Management Studio, wykonaj następującą instrukcję języka Transact-SQL:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Aby przykłady powiadomień zapytania działały poprawnie, na serwerze bazy danych należy wykonać następujące instrukcje języka Transact-SQL.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Uprawnienia powiadomień dotyczących zapytań
Użytkownicy, którzy wykonują polecenia żądające powiadomienia, muszą mieć uprawnienie do bazy danych POWIADOMIEŃ ZAPYTANIA SUBSKRYPCJI na serwerze.
Kod po stronie klienta uruchamiany w częściowej sytuacji zaufania wymaga .SqlClientPermission
Poniższy kod tworzy SqlClientPermission obiekt, ustawiając wartość na PermissionState Unrestricted. Wymusi Demand to SecurityException w czasie wykonywania, jeśli wszystkie osoby wywołujące wyższe w stosie wywołań nie otrzymały uprawnień.
// 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
Wybieranie obiektu powiadomienia
Interfejs API powiadomień o zapytaniach udostępnia dwa obiekty do przetwarzania powiadomień: SqlDependency i SqlNotificationRequest. Ogólnie rzecz biorąc, większość aplikacji non-ASP.NET powinna używać SqlDependency obiektu . ASP.NET aplikacje powinny używać wyższego poziomu SqlCacheDependency, który opakowuje SqlDependency i udostępnia platformę do administrowania obiektami powiadomień i pamięci podręcznej.
Korzystanie z programu SqlDependency
Aby można było używać SqlDependencyprogramu , należy włączyć usługę Service Broker dla używanej bazy danych programu SQL Server, a użytkownicy muszą mieć uprawnienia do odbierania powiadomień. Obiekty usługi Service Broker, takie jak kolejka powiadomień, są wstępnie zdefiniowane.
Ponadto SqlDependency automatycznie uruchamia wątek procesu roboczego w celu przetwarzania powiadomień w miarę ich opublikowania w kolejce. Analizuje również komunikat Service Broker, ujawniając informacje jako dane argumentu zdarzenia. SqlDependency należy zainicjować przez wywołanie Start
metody w celu ustanowienia zależności z bazą danych. Jest to metoda statyczna, która musi być wywoływana tylko raz podczas inicjowania aplikacji dla każdego wymaganego połączenia z bazą danych. Metoda powinna być wywoływana Stop
po zakończeniu działania aplikacji dla każdego połączenia zależności, które zostało wykonane.
Korzystanie z polecenia SqlNotificationRequest
Z kolei SqlNotificationRequest wymaga samodzielnego zaimplementowania całej infrastruktury nasłuchiwania. Ponadto należy zdefiniować wszystkie pomocnicze obiekty usługi Service Broker, takie jak kolejka, usługa i typy komunikatów obsługiwane przez kolejkę. Takie podejście ręczne jest przydatne, jeśli aplikacja wymaga specjalnych komunikatów powiadomień lub zachowań powiadomień lub jeśli aplikacja jest częścią większej aplikacji Service Broker.