2009-01-12 4 views
1

Est-il possible de déclencher une action dans le service Windows, ou est-il possible de déclencher un événement qui peut être intercepté dans un service à partir d'une procédure stockée.Élever un événement de la procédure de stockage au service Windows

Si vous imaginez un service s'exécute toutes les 5 minutes c'est effectuer une action. Que faire si quelque chose se passe dans une base de données ou une procédure stockée est exécutée et que je veux déclencher cette action plus tôt que les 5 minutes.

Quelqu'un a-t-il des idées?

Merci

Ed

Répondre

0

Suite aux commentaires de Mehrdad, j'ai été capable de résoudre le problème en utilisant la classe SqlDependancy dans le framework .NET.

Cette classe vous permet d'enregistrer une requête SQL et une connexion avec elle, lorsque le résultat de cette requête change un événement est levé pour indiquer une modification dans les données.

Ceci m'a permis d'attraper les changements de données presque instantanément et de traiter de manière appropriée.

Pour utiliser cette classe, vous devez activer les notifications de requête sur la base de données que vous souhaitez interroger voir: Enabling Query Notifications

Un bon exemple de la façon d'utiliser cette classe dans une application Windows se trouve here.

1

Vous pouvez créer une procédure CLR dans SQL Server qui communique en quelque sorte avec le service à l'aide SOAP, Remoting, ou tout autre moyen. C'est générique cependant. Je pense que la fonctionnalité de notification de requête de SQL Server 2005 peut être utile ici.

+0

Je pense que vous avez raison, je viens d'avoir une lecture sur les notifications de requête, ils semblent être la bonne réponse au problème que j'ai. Merci. – MrEdmundo

0

si vous faites un RAISERROR (@ ErrorMessage, 16,1), il devrait générer une exception sur le côté client aussi longtemps que vous utilisez une gravité et de l'état de 16 et 1.

2

On dirait que vous shouldn » t utiliser un service Windows du tout. Je configure un travail SQL pour qu'il s'exécute toutes les 5 minutes, puis configure un déclencheur ou tout ce que vous attendez pour exécuter le travail manuellement si nécessaire. Toutefois, si le service fait quelque chose en dehors de la base de données, vous pouvez utiliser xp_cmdshell pour exécuter les commandes système (ce qui n'est pas la meilleure option).

+0

DTS peut être une meilleure solution que le service Windows. –

+0

L'idée d'un travail ne résout pas mon problème. Vous avez toujours le problème de temps. Je veux être en mesure d'effectuer une action spécifique à la suite de quelque chose dans la base de données. Je ne veux pas avoir à créer un Job pour chaque action que je pourrais vouloir effectuer. – MrEdmundo

+0

Eh bien, sans savoir quel type d'action vous voulez effectuer et sur quels critères vous voulez l'exécuter, je ne peux pas répondre plus loin. – scottm

Questions connexes