如何在IIS中托管Windows服务(如)

时间:2013-05-08 15:12:09

标签: c# wcf iis

如何在IIS中托管Windows服务并使该服务像在Windows上运行一样运行? 我可以使用WCF服务中的某些功能吗?

我无法访问Windows本身,只能访问IIS。在该服务中,我将创建一个线程,在预定的时间处理一些数据。

2 个答案:

答案 0 :(得分:5)

简而言之,你不能。

更详细的答案是有两个问题:

  1. 仅当HTTP请求进入时才启动IIS工作进程。这意味着您无法使用系统启动服务。
  2. 在几个条件下回收(即重新启动)IIS工作进程。例如,如果长时间没有HTTP请求进入,则重新启动工作进程。这意味着您无法控制服务何时关闭,除非您有权访问应用程序池回收配置。请记住,回收逻辑仅确保所有挂起的HTTP请求都已完成,但不会等待所有后台线程完成。
  3. 您可以通过这种方式获得部分解决方案:

    1. 创建一个WCF服务方法,检查您的长时间运行的线程是否处于活动状态,如果没有,则启动它。
    2. 创建一个非常简单的 Windows服务,定期(在5秒内完成一次)调用该方法。在某处部署服务,例如在你自己的机器上。
    3. 剩下的唯一问题是:你真的需要避免使用Windows服务吗?你能找到一个托管服务的地方吗?当Windows服务是最好的甚至是唯一的方式时,有一些用例。

答案 1 :(得分:1)

你不能,坚果壳。

但是,您可以使用运行状况监视API,特别是心跳功能。见:

http://msdn.microsoft.com/en-us/library/system.web.management.webheartbeatevent.aspx

有关要完成工作时需要实现的类的详细信息

这个答案也可能有所帮助 Understanding heartbeat in ASP.NET health monitoring

一旦你实现了webheartbeatevent派生类,你可以检查你的数据库或你想要检查的是否有工作要做。

更好的解决方案恕我直言,完全取消服务并将系统重新设计为100%基于网络,因为服务成为部署和维护的噩梦。我假设你现在发现......

相关问题