Megosztás:


Lekérdezési értesítések engedélyezése

ADO.NET letöltése

A lekérdezési értesítéseket használó alkalmazásokra általános követelmények vonatkoznak. Az adatforrást megfelelően kell konfigurálni az SQL-lekérdezési értesítések támogatásához, a felhasználónak pedig a megfelelő ügyféloldali és kiszolgálóoldali engedélyekkel kell rendelkeznie.

A lekérdezési értesítések használatához a következőt kell tennie:

  • Lekérdezési értesítések engedélyezése az adatbázishoz.
  • Győződjön meg arról, hogy az adatbázishoz való csatlakozáshoz használt felhasználói azonosító rendelkezik a szükséges engedélyekkel.
  • Használjon objektumot SqlCommand egy érvényes SELECT utasítás végrehajtásához egy társított értesítési objektummal – vagy SqlDependencySqlNotificationRequest.
  • Adjon meg kódot az értesítés feldolgozásához, ha a figyelt adatok módosulnak.

Lekérdezési értesítésekre vonatkozó követelmények

A lekérdezési értesítések csak olyan SELECT-utasítások esetében támogatottak, amelyek megfelelnek az adott követelmények listájának. Az alábbi táblázat a Service Broker és a Lekérdezésértesítések dokumentációra mutató hivatkozásokat tartalmaz az SQL Server Books Online-ban.

AZ SQL Server dokumentációja

Lekérdezési értesítések engedélyezése mintakód futtatásához

Ha engedélyezni szeretné a Service Brokert az AdventureWorks-adatbázisban az SQL Server Management Studio használatával, hajtsa végre a következő Transact-SQL utasítást:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Ahhoz, hogy a lekérdezésértesítési minták megfelelően fussanak, az alábbi Transact-SQL utasításokat kell végrehajtani az adatbázis-kiszolgálón.

CREATE QUEUE ContactChangeMessages;

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

Lekérdezési értesítések engedélyei

Az értesítést kérő parancsokat végrehajtó felhasználóknak rendelkezniük kell a SUBSCRIBE QUERY NOTIFICATIONS adatbázis engedélyével a kiszolgálón.

A részleges megbízhatósági környezetben futó ügyféloldali kódhoz a SqlClientPermission.

Az alábbi kód létrehoz egy SqlClientPermission objektumot, és beállítja a PermissionState-t a Unrestricted-re. A Demand rendszer futásidőben kényszerít, SecurityException ha a hívásverem összes magasabb hívója nem kapta meg az engedélyt.

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;
        }
    }
}

Értesítési objektum kiválasztása

A lekérdezésértesítési API két objektumot biztosít az értesítések feldolgozásához: SqlDependency és SqlNotificationRequest.

Az SqlDependency használata

A használatához SqlDependencyengedélyezni kell a Service Brokert a használt SQL Server-adatbázishoz, a felhasználóknak pedig engedélyekkel kell rendelkezniük az értesítések fogadásához. A Service Broker-objektumok, például az értesítési üzenetsor előre definiálva vannak.

SqlDependency Emellett automatikusan elindít egy feldolgozói szálat az értesítések feldolgozásához az üzenetsorba való közzétételkor. Emellett elemzi a Service Broker üzenetét is, és eseményargumentum-adatokként adja ki az információkat. SqlDependency inicializálni kell a Start metódus meghívásával, hogy függőséget hozzon létre az adatbázishoz. Start egy statikus módszer, amelyet csak egyszer kell meghívni az alkalmazás inicializálása során minden szükséges adatbázis-kapcsolathoz. A Stop metódust az alkalmazás leállításakor kell meghívni minden létrehozott függőségi kapcsolathoz.

Az SqlNotificationRequest használata

Ezzel szemben SqlNotificationRequest a teljes figyelési infrastruktúrát saját maga kell implementálnia. Emellett meg kell határozni az összes, az üzenetsor által támogatott szolgáltatásközvetítő objektumot, például az üzenetsort, a szolgáltatást és az üzenettípust. Ez a manuális megközelítés akkor hasznos, ha az alkalmazás speciális értesítési üzeneteket vagy értesítési viselkedést igényel, vagy ha az alkalmazás egy nagyobb Service Broker-alkalmazás része.

Következő lépések