Bagikan melalui


Mengaktifkan pemberitahuan kueri

Mengunduh ADO.NET

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 Broker Layanan dan dokumentasi Pemberitahuan Kueri di SQL Server Books Online.

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 waktu proses jika semua penelepon yang lebih tinggi dalam tumpukan panggilan belum diberikan izin.

using Microsoft.Data.SqlClient;
using System.Security.Permissions;

class Program
{
    static void Main()
    {
    }

    // Code requires directives to
    // System.Security.Permissions and
    // Microsoft.Data.SqlClient

    private bool CanRequestNotifications()
    {
        SqlClientPermission permission =
            new SqlClientPermission(
            PermissionState.Unrestricted);
        try
        {
            permission.Demand();
            return true;
        }
        catch (System.Exception)
        {
            return false;
        }
    }
}

Memilih objek pemberitahuan

API pemberitahuan kueri menyediakan dua objek untuk memproses pemberitahuan: SqlDependency dan SqlNotificationRequest.

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. Start 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 antrean, layanan, dan jenis pesan yang didukung oleh antrean 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.

Langkah berikutnya