Jon*_*onF 5 sql windows-services
我正在制作一个 Windows 服务,它需要不断检查可以随时添加的数据库条目以告诉它执行一些代码。它正在查看其状态是否设置为待处理,并且其执行时间条目是否大于当前时间。执行此操作的唯一方法是一遍又一遍地运行 select 语句吗?它可能需要每分钟执行一次代码,这意味着我需要每分钟运行 select 语句来查找数据库中的条目。我试图避免不必要的 cpu 时间,因为我可能最终会为托管提供商的 cpu 周期付费
请注意,Notification Services 仅适用于 SQL 2005,并且已从 SQL 2008 中删除。
我建议编写一个从触发器调用的 CLR 存储过程,而不是轮询数据库以获取更改,该触发器在发生适当的更改(例如插入或更新)时引发。CLR 存储过程提醒您的服务,然后该服务执行其工作。
通过 TCP/IP 或 HTTP 通道发送服务警报是一个不错的选择,因为您可以在任何地方部署服务,只需修改存储过程读取的某些配置参数即可。它还可以轻松测试服务。
我会在您的服务中使用事件驱动模型。该服务等待自动重置事件,并在引发该事件时启动一个工作块。存储过程通信通道在另一个线程上运行,并在每个传入请求上设置事件。
假设服务正在执行一个工作块,并且一组多个待处理请求未完成,则此设计可确保这些请求在当前工作完成时仅触发 1 个以上的工作块。
如果需要重叠处理,您还可以让多个工作人员等待同一事件。
注意:对于外部网络访问,该CREATE ASSEMBLY
语句需要将选项PERMISSION_SET
设置为EXTERNAL_ACCESS
。
归档时间: |
|
查看次数: |
3601 次 |
最近记录: |