Aracılığıyla paylaş


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.

  • Bir SqlCommand nesnesi kullanarak, ilişkili bir bildirim nesnesiyle (SqlDependency veya SqlNotificationRequest), geçerli bir SELECT deyimini yürütün.

  • İzlenen veriler değişirse bildirimi işlemek için kod sağlayın.

Sorgu Bildirimleri Gereksinimleri

Sorgu bildirimleri yalnızca belirli gereksinimlerin 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

Ö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 aşağıdaki Transact-SQL deyimlerinin veritabanı sunucusunda 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 SqlClientPermission gereklidir.

Aşağıdaki kod, SqlClientPermission olarak PermissionState ayarlayan bir Unrestricted nesnesi oluşturur. Demand çağrı yığınında daha yukarıda olan tüm çağrıcılara izin verilmemişse, çalışma zamanında bir 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, ASP.NET olmayan uygulamaların çoğu SqlDependency nesnesini kullanmalıdır. ASP.NET uygulamaları, bildirim ve önbellek nesnelerini yönetmek için bir çerçeve sağlayan ve SqlCacheDependency öğesini saran üst düzey SqlDependency öğesini kullanmalıdır.

SqlDependency kullanma

SqlDependency'yi kullanmak için, kullanılmakta olan SQL Server veritabanı için Hizmet Aracısı'nın etkinleştirilmesi gerekir 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 argümanı verisi olarak gösterir. SqlDependency öğesi, veritabanına bağımlılık kurmak için Start yöntemini çağırarak 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. Her bir oluşturulan bağımlılık bağlantısı için Stop yöntemi uygulama sonlandırma sırasında çağrılmalıdır.

SqlNotificationRequest'i 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.

Ayrıca bakınız