.NET Windows服务 - 架构决策

时间:2010-08-18 09:54:17

标签: c# vb.net architecture windows-services

我目前有一个Windows服务,它持续全天运行。它有多个线程启动:

  • 每日更新缓存的任务
  • 每周执行任务以清理
  • 24/7将XML导入SQL Server的任务
  • 每天运行大约12小时的任务,启动控制台应用程序来管理ETL

任务不是这个问题的重要部分,但它让你知道这个Windows服务已经成长为一个怪物。它管理着每天3亿条记录中某处的进口。

很忙,但它确实有效。

这个开发的迭代让我有机会审查服务并可能将其分解,以使其更易于管理。据认为,这可能是一个管理服务的多个服务 - 如果一个组件需要更新,那么理想的是整个事情不需要苛刻。

有没有人有这方面的经验?我很想知道你的做法,因为这对我来说是一个新的领域。

我已阅读this SO帖子,其中涉及该主题。

干杯。

3 个答案:

答案 0 :(得分:4)

你的描述听起来很像我2年前写的东西。一个承载插件的Windows服务,并在多线程环境中运行它们。使用的体系结构是.NET 3.5(System.AddIn-namespace)中引入的.NET addin管道。它就像一个魅力,因为我也集成了实时/热门更新。实现新的插件非常容易,只要我愿意,就可以插入它们。所以我真的建议使用这个插件。

请参阅http://msdn.microsoft.com/en-us/library/cc175292.aspx了解快速入门。

答案 1 :(得分:1)

我已经为我们的后台服务做了类似的事情,基本上有一个ServiceHost和“Servlets”,它们通过appdomains加载,因此它们不会相互影响。

答案 2 :(得分:0)

为什么要提供服务?除了24/7的进口任务外,你所做的一切都不是我作为一项服务所做的事情。

我会用:

  • 定期安排的命令行程序,尤其是每日/每周任务
  • 或使用SSIS和SQL Scheduler安排某些事情。

唯一可以证明服务合理性的是24/7 XML导入 - 除非您可以每隔5分钟就开始启动它。