Share via


Mengaktifkan Pemberitahuan Kueri

Aplikasi yang menggunakan pemberitahuan kueri memiliki serangkaian persyaratan umum. Sumber data Anda harus dikonfigurasi dengan benar untuk mendukung pemberitahuan kueri SQL, dan pengguna harus memiliki izin sisi klien dan sisi server yang benar.

Untuk menggunakan pemberitahuan kueri, Anda harus:

  • Aktifkan pemberitahuan kueri untuk database Anda.

  • Pastikan bahwa ID pengguna yang digunakan untuk terhubung ke database memiliki izin yang diperlukan.

  • Gunakan objek SqlCommand untuk menjalankan pernyataan SELECT yang valid dengan objek pemberitahuan terkait—baik SqlDependency atau SqlNotificationRequest.

  • Berikan kode untuk memproses pemberitahuan jika data yang dipantau berubah.

Persyaratan Pemberitahuan Kueri

Pemberitahuan kueri hanya didukung untuk pernyataan SELECT yang memenuhi daftar persyaratan tertentu. Tabel berikut ini menyediakan tautan ke dokumentasi Broker Layanan dan Pemberitahuan Kueri di SQL Server dokumen.

Dokumentasi SQL Server

Mengaktifkan Pemberitahuan Kueri untuk Menjalankan Kode Sampel

Untuk mengaktifkan Service Broker pada database AdventureWorks dengan menggunakan SQL Server Management Studio, jalankan pernyataan SQL Transact berikut ini:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Agar sampel pemberitahuan kueri berjalan dengan benar, pernyataan Transact-SQL berikut ini harus dijalankan di server database.

CREATE QUEUE ContactChangeMessages;  
  
CREATE SERVICE ContactChangeNotifications  
  ON QUEUE ContactChangeMessages  
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);  

Izin Pemberitahuan Kueri

Pengguna yang menjalankan perintah meminta pemberitahuan harus memiliki izin database SUBSCRIBE QUERY NOTIFICATIONS di server.

Kode sisi klien yang berjalan dalam situasi kepercayaan parsial memerlukan SqlClientPermission.

Kode berikut ini membuat objek SqlClientPermission, mengatur PermissionState ke Unrestricted. Demand akan memaksa SecurityException pada durasi jika semua penelepon yang lebih tinggi dalam tumpukan panggilan belum diberikan izin.

// 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

Memilih Objek Pemberitahuan

API pemberitahuan kueri menyediakan dua objek untuk memproses pemberitahuan: SqlDependency dan SqlNotificationRequest. Secara umum, sebagian besar aplikasi non-ASP.NET harus menggunakan objek SqlDependency. ASP.NET aplikasi harus menggunakan tingkat SqlCacheDependencyyang lebih tinggi, yang membungkus SqlDependency dan menyediakan kerangka kerja untuk mengelola pemberitahuan dan objek cache.

Menggunakan SqlDependency

Untuk menggunakan SqlDependency, Service Broker harus diaktifkan untuk database SQL Server yang digunakan, dan pengguna harus memiliki izin untuk menerima pemberitahuan. Objek Broker Layanan, seperti antrean pemberitahuan, telah ditentukan sebelumnya.

Selain itu, SqlDependency secara otomatis meluncurkan utas pekerja untuk memproses pemberitahuan saat diposting ke antrean; ini juga mengurai pesan Service Broker, mengekspos informasi sebagai data argumen peristiwa. SqlDependency harus diinisialisasi dengan memanggil metode Start untuk membuat dependensi ke database. Ini adalah metode statis yang perlu dipanggil hanya sekali selama inisialisasi aplikasi untuk setiap koneksi database yang diperlukan. Metode Stop harus dipanggil pada penghentian aplikasi untuk setiap koneksi dependensi yang dibuat.

Menggunakan SqlNotificationRequest

Sebaliknya, SqlNotificationRequest mengharuskan Anda untuk mengimplementasikan seluruh infrastruktur mendengarkan sendiri. Selain itu, semua objek Service Broker pendukung seperti antrian, layanan, dan jenis pesan yang didukung oleh antrian harus ditentukan. Pendekatan manual ini berguna jika aplikasi Anda memerlukan pesan pemberitahuan khusus atau perilaku pemberitahuan, atau jika aplikasi Anda adalah bagian dari aplikasi Broker Layanan yang lebih besar.

Lihat juga