Lekérdezési értesítések engedélyezé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 dokumentációjá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íti SecurityException a hívást, ha a hívásverem összes magasabb hívója nem kapta meg az engedélyt.

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

É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. A legtöbb non-ASP.NET alkalmazásnak általában az objektumot kell használnia SqlDependency . ASP.NET alkalmazásoknak a magasabb szintűt SqlCacheDependencykell használniuk, amely körbefut SqlDependency , és keretrendszert biztosít az értesítési és gyorsítótár-objektumok felügyeletéhez.

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.

Emellett automatikusan elindít egy feldolgozói szálat az SqlDependency értesítéseknek az üzenetsorba való közzétételekor történő feldolgozásához; 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. Ez egy statikus módszer, amelyet csak egyszer kell meghívni az egyes adatbázis-kapcsolatok alkalmazás inicializálása során. 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 támogató Service Broker-objektumot, például az üzenetsor által támogatott üzenetsort, szolgáltatást és ü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.

Lásd még