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.

  • İ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

Ö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 PermissionStateUnrestrictedbir 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.

Ayrıca bkz.