如何在IIS中托管Windows服务
本文关键字:Windows 服务 IIS | 更新日期: 2023-09-27 18:12:46
如何在IIS中托管Windows服务并保持该服务像在Windows上运行一样运行?我可以使用WCF服务的一些功能吗?
我不能访问Windows本身,只能访问IIS。在这个服务中,我将创建一个线程,它将在预定的时间处理一些数据。
总之,你不能。
更详细的答案是有两个问题:
- IIS工作进程只在HTTP请求进入时启动。这意味着你不能在系统中启动服务。
- IIS工作进程在几个条件下被回收(即重新启动)。例如,如果长时间没有HTTP请求进入,则重启工作进程。这意味着您无法控制服务何时关闭,除非您可以访问应用程序池回收配置。请记住,回收逻辑只确保所有挂起的HTTP请求完成,但不等待所有后台线程完成。
您可以通过以下方式获得部分解决方案:
- 创建一个WCF服务方法,检查长时间运行的线程是否活着,如果不是,就启动它。创建一个非常简单的 windows服务,定期(每5秒一次)调用该方法。在某个地方部署服务,例如在您自己的机器上。
剩下的唯一问题是:你真的需要避免windows服务吗?你能找到一个地方举办服务吗?在某些用例中,windows服务是最好的甚至是唯一的方法。
你不能,in a nut shell
但是,您可以使用运行状况监视API,特别是心跳功能。看到:
http://msdn.microsoft.com/en-us/library/system.web.management.webheartbeatevent.aspx查看需要实现的类的详细信息,以便在有工作要做时调用
这个关于SO的答案也可能有所帮助了解ASP中的心跳。NET运行状况监视
一旦你实现了webheartbeatevent派生类,你可以检查你的数据库或任何你想检查是否有工作要做。
一个更好的解决方案是完全废弃服务,重新设计系统,使其100%基于web,因为服务成为部署和维护的噩梦。