【问题标题】:Should I use only one new service() or more?我应该只使用一项新的 service() 还是更多?
【发布时间】:2012-09-08 21:19:16
【问题描述】:

我创建了一个 Windows 服务项目。如果你创建一个新项目,你会得到这样的结果:

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
  new Service1() 
};
ServiceBase.Run(ServicesToRun);

现在我必须在我的班级Service1() 中添加一些功能和计时器,然后一切都很好。

现在让我说,我的服务应该做一些事情,比如:读取一些文件、删除一些文件夹、检查连接......

而且它们都应该异步运行。现在有什么好?复制 Service1() 中的所有函数,不更改任何其他内容,或者为每个“东西”创建一个新类(Service1()、Service2()、...)并像这样添加它们

ServicesToRun = new ServiceBase[] 
{ 
  new Service1(),
  new Service2() //not sure this will compile
};

只是问。也许我没有 100% 理解服务是如何工作的......

【问题讨论】:

  • 有趣的问题。我想知道,但从未尝试过。哦,它肯定会编译——问题真的是:它工作。鉴于 API 接受一个数组,我的默认假设是“是的,可以正常工作”。但是……没试过。当然,既然服务无论如何都需要启动一个新线程,你可以只用一个服务实例来启动3组操作,
  • 你看到了吗? stackoverflow.com/questions/1688275/… -- 讨论如何而不是为什么。这确实是一个设计问题,取决于你在做什么。

标签: c# .net service


【解决方案1】:

这对于这个问题可能有点过于笼统,但 Windows 服务应该执行单个或一组相关功能。一般来说,服务越少越好,但是一旦服务开始做多项事情,在以下情况下考虑将它们分开:

  1. 它们需要不同级别的安全性。例如,如果某些功能需要管理员访问权限而有些不需要,请考虑将它们拆分为不同的服务。
  2. 用户可能或希望运行一个功能(即服务)而不是另一个。例如,某些功能可能取决于可选组件或可能未安装的组件。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2023-02-02
    • 2023-02-10
    • 2011-07-08
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多