C# .NET Windows服务-体系结构决策

C# .NET Windows服务-体系结构决策,c#,vb.net,architecture,windows-services,C#,Vb.net,Architecture,Windows Services,我目前有一个Windows服务,每天都在运行。它有多个启动线程: 每天更新缓存的任务 每周要清理的任务 将XML导入SQL Server的全天候任务 每天运行约12小时的任务启动控制台应用程序来管理ETL 任务并不是这个问题的重要部分,但它让你觉得这个Windows服务已经变成了一个怪物。它每天管理着大约3亿条记录的进口 这很忙,但很管用 这个开发的迭代给了我一个机会来检查服务,并可能对其进行分解,以使其更易于管理。人们认为,这可能是多个服务和一个manager服务——理想的情况是,如果一个

我目前有一个Windows服务,每天都在运行。它有多个启动线程:

  • 每天更新缓存的任务
  • 每周要清理的任务
  • 将XML导入SQL Server的全天候任务
  • 每天运行约12小时的任务启动控制台应用程序来管理ETL
任务并不是这个问题的重要部分,但它让你觉得这个Windows服务已经变成了一个怪物。它每天管理着大约3亿条记录的进口

这很忙,但很管用

这个开发的迭代给了我一个机会来检查服务,并可能对其进行分解,以使其更易于管理。人们认为,这可能是多个服务和一个manager服务——理想的情况是,如果一个组件需要更新,那么整个事情就不需要磨碎成一堆

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

我已经读了这么多关于这个话题的帖子


干杯。

你的描述听起来很像我两年前写的东西。承载加载项并在多线程环境中运行它们的windows服务。所使用的体系结构是.NET 3.5(System.addin命名空间)中引入的.NET addin管道。它就像一个魅力,因为我还集成了实时/热更新。实现新的加载项并在我喜欢的时候插入它们非常容易。所以我真的建议使用这个插件


有关快速启动的信息,请参阅。

为什么选择服务?除了24/7导入任务之外,您所做的几乎没有一件事情是我作为服务所做的

我将使用:

  • 定期安排的命令行程序,特别是在每日/每周任务上
  • 或者使用SSIS和SQL调度程序来调度某些内容

唯一可以证明一项服务是24/7 XML导入,除非你可以不用启动它,例如,每5分钟一次。

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

还有什么“事情”启动计划任务?服务!那为什么不自己写呢?资源?因为已经有一个在运行。它被称为任务调度器,并且已经成为windows的一部分一段时间了。当你很早就有了一个API来安排任务时,为什么还要重新发明轮子呢?重新投入的工作量越少=维护工作量越少=解决方案越便宜。例如,如果您的任务应该由文件系统事件触发,该怎么办?任务调度器只允许“轮询”工作。没有可用的推送机制。你会注意到,我说过这是他们唯一有效的例子。我绝对不会为每小时/天/周开始的事情保留服务。文件系统cna的导入通常也由运行5分钟的程序来处理。为响应干杯。在我阅读的过程中,我立即发现了我的几个任务,这些任务可以放在几个小的控制台应用程序中并安排好。我突然意识到有一种依赖(ut-oh)。目前,我将停止24/7 XML导入活动,同时每周执行更繁重的任务。你怎么认为?只需从小型控制台应用程序中创建一个标志(小文本文件),Windows服务就可以读取…?新的MEF东西会更适合这些天吗?我还没有使用过MEF。也许其他人已经有了?反馈welcomeHi-为回应干杯。我问了这个问题,希望能激发人们利用一些较新的.NET功能的想法。我已经设法说服该项目使用VS2010,但.NET4.0仍不在“批准”列表中。接受您的建议可能是Windows服务的唯一出路。我还将查看MEF。我有大致相同的问题