2013-05-08 16 views
1

如何在IIS中托管Windows服务并使该服务在Windows上运行时运行? 我可以使用WCF服务的某些功能吗?如何在IIS中承载Windows服务(如)

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

回答

1

你不能,坚果壳。

但是,您可以使用健康监视API,特别是心跳功能。见:

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

有关类的详细信息,你将需要实现被调用时,有工作要做

也因此这个答案可能会帮助 Understanding heartbeat in ASP.NET health monitoring

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

更好的解决方案恕我直言,就是彻底废除服务,并重新设计系统为100%基于网络,因为服务成为部署和维护的噩梦。因为我假设你现在正在找出...

+0

谢谢!我会看看......然后回来! – 2013-05-08 17:59:10

4

总之,你不能。

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

  1. IIS工作进程只在启动时一个HTTP请求进入这意味着你不能随系统启动服务。
  2. 在多个条件下,IIS工作进程被回收(即重新启动)。例如,如果长时间没有HTTP请求进入,工作进程将重新启动。这意味着您无法控制关闭服务的时间,除非您有权访问应用程序池回收配置。请记住,回收逻辑仅确保所有挂起的HTTP请求都已完成,但不会等待所有后台线程完成。

你可以跟一个部分解决方案是这样的:

  1. 创建一个检查,如果你的长期运行线程是活的,如果不是,它开始WCF服务方法。
  2. 创建很简单窗口服务,定期(5秒一次)调用这个方法。在某处部署服务,例如在你自己的机器上。

剩下唯一的问题是:你真的需要避免窗口服务?你能找到一个地方来承载这项服务吗?有一些使用情况下,Windows服务是最好的甚至唯一的方法。

+0

谢谢!也许是时候重新考虑解决方案了...... – 2013-05-08 17:58:35

相关问题