Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Toepassingen die querymeldingen gebruiken, hebben een gemeenschappelijke set vereisten. Uw gegevensbron moet correct zijn geconfigureerd ter ondersteuning van SQL-querymeldingen en de gebruiker moet over de juiste machtigingen aan de clientzijde en serverzijde beschikken.
Als u querymeldingen wilt gebruiken, moet u het volgende doen:
- Schakel querymeldingen in voor uw database.
- Zorg ervoor dat de gebruikers-id die wordt gebruikt om verbinding te maken met de database over de benodigde machtigingen beschikt.
- Gebruik een SqlCommand object om een geldige SELECT-instructie uit te voeren met een gekoppeld meldingsobject, of SqlDependencySqlNotificationRequest.
- Geef code op om de melding te verwerken als de gegevens die worden bewaakt, worden gewijzigd.
Vereisten voor querymeldingen
Querymeldingen worden alleen ondersteund voor SELECT-instructies die voldoen aan een lijst met specifieke vereisten. De volgende tabel bevat koppelingen naar de documentatie voor Service Broker en Querymeldingen in SQL Server Books Online.
Documentatie voor SQL Server
- Een query voor meldingen maken
- Beveiligingsoverwegingen voor Service Broker
- Beveiliging en bescherming (Service Broker)
- Beveiligingsoverwegingen voor meldingenservices
- Machtigingen voor Vragen over Meldingen
- Internationale overwegingen voor Service Broker
- Overwegingen bij het ontwerpen van oplossingen (Service Broker)
- Service Broker Developer InfoCenter
- Ontwikkelaarshandleiding (Service Broker)
Querymeldingen inschakelen om voorbeeldcode uit te voeren
Als u Service Broker wilt inschakelen op de AdventureWorks-database met behulp van SQL Server Management Studio, voert u de volgende Transact-SQL-instructie uit:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
De volgende Transact-SQL instructies moeten worden uitgevoerd op de databaseserver om de querymeldingsvoorbeelden correct uit te voeren.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Machtigingen voor querymeldingen
Gebruikers die opdrachten uitvoeren om een melding aan te vragen, moeten op de server de databasemachtiging 'SUBSCRIBE QUERY NOTIFICATIONS' hebben.
Code aan de clientzijde die wordt uitgevoerd in een gedeeltelijke vertrouwenssituatie vereist de SqlClientPermission.
Met de volgende code maakt u een SqlClientPermission object en stelt u PermissionState in op Unrestricted. De Demand zal tijdens uitvoering een SecurityException forceren als alle bellers hoger in de aanroepstack de machtiging niet zijn verleend.
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;
}
}
}
Een meldingsobject kiezen
De API voor querymeldingen biedt twee objecten voor het verwerken van meldingen: SqlDependency en SqlNotificationRequest.
SqlDependency gebruiken
Om te kunnen gebruiken SqlDependency, moet Service Broker zijn ingeschakeld voor de SQL Server-database die wordt gebruikt en moeten gebruikers machtigingen hebben om meldingen te ontvangen. Service Broker-objecten, zoals de meldingswachtrij, zijn vooraf gedefinieerd.
SqlDependency Start ook automatisch een werkdraad om meldingen te verwerken op het moment dat ze in de wachtrij worden geplaatst. Het parseert ook het Service Broker-bericht en geeft de informatie weer als gebeurtenisargumentgegevens.
SqlDependency moet worden geïnitialiseerd door de Start methode aan te roepen om een afhankelijkheid voor de database tot stand te brengen.
Start is een statische methode die slechts eenmaal moet worden aangeroepen tijdens de initialisatie van de toepassing voor elke vereiste databaseverbinding. De Stop methode moet worden aangeroepen bij beëindiging van de toepassing voor elke afhankelijkheidsverbinding die is gemaakt.
SqlNotificationRequest gebruiken
U moet daarentegen SqlNotificationRequest zelf de volledige luisterinfrastructuur implementeren. Bovendien moeten alle ondersteunende Service Broker-objecten, zoals de wachtrij, service en berichttypen die worden ondersteund door de wachtrij, worden gedefinieerd. Deze handmatige benadering is handig als uw toepassing speciale meldingsberichten of gedrag van meldingen vereist, of als uw toepassing deel uitmaakt van een grotere Service Broker-toepassing.