Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Program som använder frågemeddelanden har en gemensam uppsättning krav. Datakällan måste vara korrekt konfigurerad för att stödja SQL-frågemeddelanden och användaren måste ha rätt behörighet på klientsidan och på serversidan.
Om du vill använda frågemeddelanden måste du:
- Aktivera frågemeddelanden för databasen.
- Kontrollera att användar-ID:t som används för att ansluta till databasen har nödvändiga behörigheter.
- Använd ett SqlCommand objekt för att köra en giltig SELECT-instruktion med ett associerat meddelandeobjekt – antingen SqlDependency eller SqlNotificationRequest.
- Ange kod för att bearbeta meddelandet om de data som övervakas ändras.
Krav för frågemeddelanden
Frågemeddelanden stöds endast för SELECT-instruktioner som uppfyller en lista med specifika krav. Följande tabell innehåller länkar till dokumentationen för Service Broker och Query Notifications i SQL Server Books Online.
SQL Server-dokumentation
- Skapa en fråga för meddelande
- Säkerhetsöverväganden för Service Broker
- Säkerhet och skydd (Service Broker)
- Säkerhetsöverväganden för Notifications Services
- Behörigheter för frågemeddelanden
- Internationella överväganden för Service Broker
- Överväganden för lösningsdesign (Service Broker)
- Service Broker Developer InfoCenter
- Utvecklarguide (Service Broker)
Aktivera frågemeddelanden för att köra exempelkod
Om du vill aktivera Service Broker i AdventureWorks-databasen med hjälp av SQL Server Management Studio kör du följande Transact-SQL-instruktion:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
För att frågemeddelandeexemplen ska köras korrekt måste följande Transact-SQL-instruktioner köras på databasservern.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Behörigheter för frågemeddelanden
Användare som kör kommandon som begär avisering måste ha databasbehörigheten SUBSCRIBE QUERY NOTIFICATIONS på servern.
Kod på klientsidan som körs i en partiell förtroendesituation kräver SqlClientPermission.
Följande kod skapar ett SqlClientPermission objekt och anger PermissionState till Unrestricted. Demand Tvingar fram en SecurityException vid körning om alla metodanropare högre i anropsstacken inte har beviljats behörigheten.
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;
}
}
}
Välja ett meddelandeobjekt
API:et för frågemeddelanden innehåller två objekt för att bearbeta meddelanden: SqlDependency och SqlNotificationRequest.
Använda SqlDependency
Om du vill använda SqlDependencymåste Service Broker vara aktiverat för SQL Server-databasen som används och användarna måste ha behörighet att ta emot meddelanden. Service Broker-objekt, till exempel meddelandekön, är fördefinierade.
Startar också automatiskt en arbetstråd för att bearbeta meddelanden när dessa har lagts till i kön. Det parsar också Service Broker-meddelandet och exponerar informationen som händelseargumentdata.
SqlDependency måste initieras genom att anropa Start metoden för att upprätta ett beroende till databasen.
Start är en statisk metod som bara behöver anropas en gång under programinitiering för varje databasanslutning som krävs. Metoden Stop ska anropas vid programavslut för varje beroendeanslutning som har upprättats.
Använda SqlNotificationRequest
Däremot SqlNotificationRequest måste du implementera hela lyssnarinfrastrukturen själv. Dessutom måste alla stödda Service Broker-objekt, till exempel kö-, tjänst- och meddelandetyper som stöds av kön, definieras. Den här manuella metoden är användbar om ditt program kräver särskilda meddelanden eller meddelandebeteenden, eller om ditt program ingår i ett större Service Broker-program.