【发布时间】:2011-04-15 12:59:58
【问题描述】:
我正在寻找有关实施 Windows 服务的一般建议。我的要求如下:
- 该服务处理来自数据库的行 - 因此,如果存在具有特定状态的行,它需要做一些工作,写入其他一些表,然后将该行标记为正在处理。
- 服务启动时可能有数千行等待处理 - 它应该全部处理。
- 然后服务应该继续运行,处理写入我的 ForProcessing 表中的所有行。
- 我需要能够优雅地关闭它 - 我不想要任何半处理的行
- 它需要高效执行 - 如果可能,我不想轮询数据库
所以我的具体问题是:
- 如何保持它的活跃性并在写入新行时对其做出响应?我可以使用某种
SQLDependency对象来有效地处理新行吗? - 如何处理正常启动和关闭?
- 从数据库中获取行时,我应该获取所有正在等待处理的行,还是一次只获取一个?
- 假设它已经是后台服务,我会同步处理行吗?换句话说,不需要在后台线程上处理行?
- 在帐户方面我需要考虑什么以及它在什么权限下运行?这是部署问题吗?
- 还有其他需要注意的问题吗?
感谢您的建议。
附言。是否有任何其他合理的替代方法可以使用 Windows 服务来实现这一目标?
【问题讨论】:
-
听起来您正在使用
ForProcessing表作为队列形式。您是否阅读/考虑过 Service Broker - 它内置在 SQL Server 中。它有一些自己的学习曲线(尽管您可以将大部分逻辑放在 CLR 存储过程中,所以您仍然主要编写 .NET 代码) -
如果您刚刚开始创建服务,这里是 C# 中的一步一步:stackoverflow.com/questions/593454/…
标签: c# sql-server windows-services