C# Windows服务的替代方案

15

请问是否有任何替代Windows服务的方法?我提出这个问题的原因是我发现Windows服务很难进行测试,因为需要先安装它。

谢谢。


1
我的问题是,我发现Windows服务很难测试,因为它需要先安装。关于这一点,我想说的是,您可以通过在窗体上编写整个代码来测试窗口服务。在对窗体的代码感到满意后,您可以将该代码复制并粘贴到Service.cs文件中进行测试。 - Shilpa Soni
我必须在这个问题上同意OP的观点,服务更难以在生产环境中进行故障排除。但是,是的,有方法可以缓解这个问题,通过先将您的代码编写为控制台/窗体应用程序运行。对于安装问题和权限问题,您最好使用日志记录和事件查看器。 - Hoàng Long
6个回答

16

请查看Topshelf项目。它具有控制台应用程序的简单性,但可以安装为Windows服务。


5
这只需要正确组织和优化你的代码,这样它就不必从服务方法中被调用。比如,你有一个函数调用来运行所有的东西,它可以从服务、Main方法或者NUnit等中调用。
否则,如果你仍然想要另一个替代方案,你可以在Main方法中编写所有内容,然后将你的程序作为Windows计划任务的一部分运行。

3
很遗憾,事情并不像那么简单。你将会遇到特定于Windows服务的运行时错误,比如安装问题、日志记录、访问冲突等等,这些错误很难测试。你可以附加调试器到进程中,但这仍然不是一种理想的找出错误的方式。 - Mert Akcakaya

4

您最好的替代Windows服务的选择是Windows Server AppFabric。这里有一篇关于如何使用它的博客文章

然而,我认为它并没有更容易进行测试。对于测试,您最好的选择是从控制台运行您的Windows服务。只需实例化您的服务对象并公开一个启动方法即可实现。


1

为你的控制台应用程序添加基本的命令行开关支持。将默认行为(没有开关)设置为以服务方式运行,因为Windows服务控制器将以此方式运行它。添加一个 -d 开关以运行调试模式,这只会调用你实际服务代码的入口点,而不是尝试以服务方式运行。在VS中,打开项目属性,转到调试选项卡,在启动调试器时设置你的调试命令行开关。


0

尝试使用Windows计划程序。它很容易根据时间逻辑启动任何程序,并且也很容易配置任何类型的项目,如控制台或Windows表单。


0
你可以考虑使用Windows Azure Worker Roles。这样你就可以获得一个类似于运行服务的环境,同时也是在云端托管的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接