如果我在处理WCF请求时停止我的Windows服务会发生什么?

Bri*_*Kay 7 .net c# vb.net service

我猜测所有执行都会立即停止,并且调用结束会超时.当你停止服务时会发生什么,你对它有多少控制权?

hat*_*ica 6

当服务控制管理器告诉您的服务停止时,.Net ServiceBase会将状态设置为SERVICE_STOP_PENDING并调用服务的OnStop方法。您可以根据自己的意愿来处理该通知。理想情况下,您将具有某种机制,例如使用CancellationToken通知当前正在工作的任何线程,他们需要将其打包并尽快退出。您的情况可能涉及关闭ServiceHost。您的OnStop方法应该等待,直到知道已完成操作为止(例如,通过加入线程),然后再返回。有多种方法可以通知服务控制管理器您需要更多时间,或者只是让它知道您已收到该通知并且您正在积极地停止(SERVICE_STATUS dwcheckpoint)。

如果您只是从OnStop立即返回(或不费心实现它),那么我认为您的服务线程将被全部强行终止。我不确定,因为我从未尝试过。我总是实现OnStop,并且只有在清理完所有内容后才返回。如果您实现了OnStop,但是要花很长时间返回而又不让服务控制管理器知道您正在使用它,那么它将等待一会儿(服务停止需要20秒...这是一个注册表设置),然后终止您的线程。

正确的做法是编写服务,以便使其快速启动,快速停止,暂停和快速继续等等。从上面的描述可以看出,实际情况完全取决于服务的实现方式。只有您拥有“肯定知道”的信息。

http://blogs.msdn.com/b/bclteam/archive/2009/02/19/in-depth-how-net-managed-services-interact-with-the-servicecontrolmanager-scm-kim-hamilton.aspx