APSQL

Mise en place d'une solution de notification avec SQL Server 2005

L'exemple repose sur la base Club. Le service de notification va permettre de connaitre très simplement la liste des individus dont l'adhésion n'est plus à jour.

Etape 1 : Créer l'instance de Notification Services

Pour créer le service de notification il faut depuis SQL Server management Studio sélectionner le dossier Notification Services depuis l'explorateur d'objets, puis cliquer sur le choix Nouvelle instance de Notification Services dans le menu contextuel.

Explorateur d'objets SSMS

Pour créer une nouvelle instance du service de notification, il est nécessaire de fournir un fichier de configuration de l'instance ICF. Le cas présenté ici s'appuie sur le fichier InstanceConfig.xml. Ce fichier ainsi que tous les autres fichiers liés au service de notification sont enregistrés dans le répertoire c:\notifications. Le seul paramètre correspond au nom de l'instance qui héberge les données et le service de notification. Le fichier ICF fait référence au fichier de configuration de l'application appADF.xml qui est stocké dans le dossier c:\notifications\AppDefinition. Le fichier ADF fait référence au fichier AdhesionTransformation.xslt situé dans le dossier c:\notifications. Ce fichier est utilisé pour la mise en forme des notifications.

ecran création instance de notification

La nouvelle instance du service de notification doit alors se créer avec succès.

Nouveau service de notification dans SSMS

La création du service de notification permet également de constater que 2 nouvelles bases de données sont créées: InstanceClubAdhesionApplication et InstanceClubNSMain.

Etape 2 : Démarrer l'instance

Avant de démarrer le service de notification, il est nécessaire de s'assurer que les comptes de sécurités sont bien configurés. Le service Windows de notification va s'exécuter dans le contexte d'un compte d'utilisateur. Il est nécessaire que ce compte puisse se connecter aux différentes bases de notifications. Par exemple le compte Windows notificationClub est créé et utilisé à cet effet. Un utilisateur Windows porte donc ce nom, ce compte doit être configuré de façon à pouvoir être utilisé par un service (le mot de passe n'est pas changé lors de la première connexion et il n'expire jamais).

Caractéristiques du compte Windows

Au niveau du serveur une connexion est associée à ce compte Windows. Des comptes d'utilisateurs sont également créé dans les bases InstanceClubNSMain et InstanceClubApplicationAdhesion.

Les comptes utilsateurs base de données

Dans chaque base, le compte doit être membre du rôle NSRunService.

Compte tenu que le service de notification va utiliser des fichiers, il faut s'assurer que le compte Windows dispose des privilèges suffisant pour travailler dans le dossier c:\notifications.

Il est maintenant possible de demander l'inscription du service

Demander l'inscription du service

Lors de l'inscription, il est nécessaire de demander la création d'un service Windows et de spécifier le nom (notificationClub) et le mot de passe de l'utilisateur créé à cet effet. Il faut également préciser qu'une authentification de type Windows est utilisé pour se connecter au serveur SQL.

L'inscription, terminé, il ne reste plus alors qu'à démarrer le service de notification. Cette opération est réalisée depuis SQL Server Management Studio.

Démarrer le service de notification

Etape 3 : Gérer les abonnés

La gestion des abonnements est faite sous la forme de script VBScripts qui sont plus facile à mettre en place que du code VB.Net ou bien C#. Toutefois pour un usage plus régulier, il est nécessaire de passer par une programmation en C# ou VB.net afin de proposer une interface convenable.

Il est nécessaire de créer les abonnés dans un premier temps car seuls les abonnées peuvent souscrire un ou plusieurs abonnements.

Les informations relatives aux abonnés sont stockées dans la base de données de l'instance. Les abonnés sont donc communs à toutes les applications hébergées par une même instance du service de notification. Chaque abonné est parfaitement identifié par son ID. Comme chaque abonné peut disposer de plusieurs canaux de remise, il faut fournir toutes les informations relatives à chaque canal (adresse de messagerie, ...). Dans le script ajouteAbonnes exposé ci dessous, la première étape consiste à retrouver la référence du service de notification. Ensuite il est possible d'ajouter les abonnés (Subscribers), qui sont parfaitement identifiés par leur nom. Pour chaque abonné un canal de remise est défini.


Dim nsInstance, nsSubscriber, nsSubscriberDevice
' Créer et initialiser l'objet NSInstance
Set nsInstance = WScript.CreateObject("Microsoft.SqlServer.NotificationServices.NSInstance")
nsInstance.Initialize "InstanceClub"
' Créer et initiliser l'objet qui permet de définir les abonnés
Set nsSubscriber = WScript.CreateObject("Microsoft.SqlServer.NotificationServices.Subscriber")
nsSubscriber.Initialize (nsInstance)

' Définir et ajouter 3 abonnés
nsSubscriber.SubscriberId = "Pierre"
nsSubscriber.Add
nsSubscriber.SubscriberId = "Paul"
nsSubscriber.Add
nsSubscriber.SubscriberId = "Marie"
nsSubscriber.Add


' Définir et asocier à chaque abonné un canal de remise
Set nsSubscriberDevice = WScript.CreateObject("Microsoft.SqlServer.NotificationServices.SubscriberDevice")
nsSubscriberDevice.Initialize (nsInstance)

nsSubscriberDevice.DeviceName = "monCanal"

nsSubscriberDevice.SubscriberId = "Pierre"
nsSubscriberDevice.DeviceTypeName = "File"
nsSubscriberDevice.DeviceAddress="Pierre@test.fr"
nsSubscriberDevice.DeliveryChannelName = "FileChannel"
nsSubscriberDevice.Add

nsSubscriberDevice.SubscriberId = "Paul"
nsSubscriberDevice.DeviceTypeName = "File"
nsSubscriberDevice.DeviceAddress="Paul@test.fr"
nsSubscriberDevice.DeliveryChannelName = "FileChannel"
nsSubscriberDevice.Add

nsSubscriberDevice.SubscriberId = "Marie"
nsSubscriberDevice.DeviceTypeName = "File"
nsSubscriberDevice.DeviceAddress="Marie@test.fr"
nsSubscriberDevice.DeliveryChannelName = "FileChannel"
nsSubscriberDevice.Add

		

Etape 4 : Gérer les abonnements

Les informations spécifiques à chaque abonnement sont stockées dans la base de données application. Pour chaque abonnement, il est nécessaire de conserver, l'identifiant de l'abonné, le canal à utiliser pour fournir les notifications et les informations de notifications qui intéresse l'abonné. La réception et la présentation des informations envoyées par le service de notification restent à la charge de l'application côté client.

La définition des abonnements est réalisée par l'intermédiaire du fichier VBScript ajouteAbonnements.vbs. Le script commence par se positionner sur l'instance puis sur l'application qui va être concernées par les abonnements. Ensuite un objet de type abonnements (Subscriptions) est créé par rapport au type d'abonnements disponible au niveau de l'application. Enfin cet objet est valorisé en fonction des paramètres de l'abonnement.


Dim nsInstance, nsApplication, nsSubscription

' Se possitionner sur l'instance du service de notification
Set nsInstance = WScript.CreateObject("Microsoft.SqlServer.NotificationServices.NSInstance")
nsInstance.Initialize "InstanceClub"

' Se positionner sur l'application
Set nsApplication = WScript.CreateObject("Microsoft.SqlServer.NotificationServices.NSApplication")
nsApplication.Initialize (nsInstance), "ApplicationAdhesion"

'Définir un nouvel abonnement

Set nsSubscription = WScript.CreateObject("Microsoft.SqlServer.NotificationServices.Subscription")
nsSubscription.Initialize (nsApplication), "AdhesionSubscription"


nsSubscription.SetFieldValue "DeviceName", "monCanal"
nsSubscription.SetFieldValue "SubscriberLocale", "fr-FR"
nsSubscription.SetFieldValue "numero", 10
nsSubscription.SubscriberId = "Paul"
nsSubscription.Add
		

Etape 5 : Tester le service

Pour tester efficacement le service, il faut lui soumettre un évènement. Pour cela il suffit de mettre à jour la date de fin de validité de l'adhésion n°10. Ce qui peut être fait à l'aide du script suivant:


use club;
go
update adhesions set dateFin=getdate()-50 where numero=10;
		

Après quelques instants, le fichier FileNotifications.txt est créé dans le dossier c:\notifications. L'ouverture de ce fichier permet de connaitre le message de notification généré automatiquement.

En savoir plus:
Le fichier IDF
Le fichier ADF