一种SQL Server 2000主动通知应用程序的方案
做一计费系统,程序是永久运行,而计费规则是一次性读入,缓存在内存中,于是出现一个问题:当在数据库中修改计费规则的时候必须重新启动程序。
重启当然不太好,于是考虑了一种方案:在每天凌晨3:00重新载入一次计费规则。
基本上来讲,这样也就行了。不过如果能实时反映数据库中的数据,似乎这缓存机制就更好了。
主动向应用程序发消息的办法倒是没找着,不过想到了xp_cmdshell存储过程。
于是得一方案:
1.单独写一个程序暂且命名为“触发程序”,一运行即根据main(string[] args)参数args通过win API:PostMessage发自定义消息给计费程序。(计费程序的句柄可以运行时便写入文件中,触发程序从文件中读取)
2.建一个针对计费规则表的insert,update,delete触发器。
3.触发器调用xp_cmdshell,参数是触发程序的路径,并可以通过args传递参数。
4.计费程序重载DefWndProc函数来处理这个自定义消息,在这儿重新载入计费规则。
整个方案就是这样,关键在于触发器、xp_cmdshell、进程间通信。
不知道这样实现是否会存在安全问题或其它问题?