Sorgu Bildirimlerini Etkinleştirme
Sorgu bildirimlerini kullanan uygulamaların ortak bir gereksinim kümesi vardır. Veri kaynağınızın SQL sorgu bildirimlerini destekleyecek şekilde doğru yapılandırılması ve kullanıcının doğru istemci tarafı ve sunucu tarafı izinlerine sahip olması gerekir.
Sorgu bildirimlerini kullanmak için:
Veritabanınız için sorgu bildirimlerini etkinleştirin.
Veritabanına bağlanmak için kullanılan kullanıcı kimliğinin gerekli izinlere sahip olduğundan emin olun.
İlişkili bir SqlCommand bildirim nesnesiyle (veya SqlNotificationRequest) geçerli bir SELECT deyimi yürütmek için bir nesne SqlDependency kullanın.
İzlenen veriler değişirse bildirimi işlemek için kod sağlayın.
Sorgu Bildirimleri Gereksinimleri
Sorgu bildirimleri yalnızca belirli bir gereksinimler listesini karşılayan SELECT deyimleri için desteklenir. Aşağıdaki tabloda, SQL Server belgelerindeki Hizmet Aracısı ve Sorgu Bildirimleri belgelerine bağlantılar sağlanmaktadır.
SQL Server belgeleri
Hizmet Aracısı için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler
Bildirim Hizmetleri için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler
Çözüm Tasarımında Dikkat Edilmesi Gerekenler (Hizmet Aracısı)
Örnek Kod Çalıştırmak için Sorgu Bildirimlerini Etkinleştirme
SQL Server Management Studio kullanarak AdventureWorks veritabanında Hizmet Aracısı'nı etkinleştirmek için aşağıdaki Transact-SQL deyimini yürütür:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Sorgu bildirim örneklerinin doğru çalışması için veritabanı sunucusunda aşağıdaki Transact-SQL deyimlerinin yürütülmesi gerekir.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Sorgu Bildirimleri İzinleri
Bildirim isteyen komutları yürüten kullanıcıların sunucuda SUBSCRIBE QUERY NOTIFICATIONS veritabanı izni olmalıdır.
Kısmi bir güven durumunda çalışan istemci tarafı kodu için SqlClientPermissiongerekir.
Aşağıdaki kod, öğesini olarak ayarlayan PermissionState Unrestrictedbir SqlClientPermission nesne oluşturur. , Demand çağrı yığınında daha yüksek olan tüm arayanlara izin verilmediyse, çalışma zamanında bir'i SecurityException zorlar.
// 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
Bildirim Nesnesi Seçme
Sorgu bildirimleri API'sinde bildirimleri işlemek için iki nesne sağlanır: SqlDependency ve SqlNotificationRequest. Genel olarak, non-ASP.NET uygulamaların çoğu nesnesini kullanmalıdır SqlDependency . ASP.NET uygulamalar, bildirim ve önbellek nesnelerini yönetmek için bir çerçeve oluşturan ve sarmalayan SqlDependency üst düzey SqlCacheDependencyöğesini kullanmalıdır.
SqlDependency kullanma
kullanmak SqlDependencyiçin, Hizmet Aracısı'nın kullanılmakta olan SQL Server veritabanı için etkinleştirilmesi ve kullanıcıların bildirim alma izinlerine sahip olması gerekir. Bildirim kuyruğu gibi Hizmet Aracısı nesneleri önceden tanımlanmıştır.
Ayrıca, SqlDependency bildirimleri kuyruğa gönderildiğinde işlemek için otomatik olarak bir çalışan iş parçacığı başlatır; ayrıca Hizmet Aracısı iletisini ayrıştırarak bilgileri olay bağımsız değişkeni verileri olarak gösterir. SqlDependency veritabanına bağımlılık oluşturmak için yöntemini çağırarak Start
başlatılmalıdır. Bu, gerekli her veritabanı bağlantısı için uygulama başlatma sırasında yalnızca bir kez çağrılması gereken statik bir yöntemdir. Yöntemi, Stop
yapılan her bağımlılık bağlantısı için uygulama sonlandırma sırasında çağrılmalıdır.
SqlNotificationRequest kullanma
Buna karşılık, SqlNotificationRequest dinleme altyapısının tamamını kendiniz uygulamanızı gerektirir. Ayrıca kuyruk, hizmet ve kuyruk tarafından desteklenen ileti türleri gibi tüm destekleyici Hizmet Aracısı nesneleri tanımlanmalıdır. Bu el ile yaklaşım, uygulamanız özel bildirim iletileri veya bildirim davranışları gerektiriyorsa veya uygulamanız daha büyük bir Hizmet Aracısı uygulamasının parçasıysa kullanışlıdır.