优雅地终止WCF服务 - 完成所有打开的会话并限制新会话

时间:2009-11-03 02:47:56

标签: wcf session windows-services

我有一个我编写的WCF服务,它托管在Windows服务中。它以PerSession模式运行。该服务允许客户端通过该服务打开文件,更改文件和远程关闭文件。到目前为止,所有工作都非常顺利。

当Windows服务停止时,我希望能够让WCF服务不接受任何新会话,并允许已连接的客户端完成当前会话并工作(在合理的时间段/超时内)。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:8)

基本上,调用ServiceHost.Close()将完成此操作 - 它将使所有当前正在运行的请求运行完成,但新请求将被拒绝,并且有序关闭正在进行中。

您为服务配置的绑定上有一个“CloseTimeout”设置 - 它控制WCF运行时允许运行请求所需的时间,直到它们正确关闭为止。如果发生超时,仍将运行仍在运行的请求。

另一方面,ServiceHost.Abort()方法是大锤的数字等效方法 - 所有正在运行的请求都会立即终止,主机也会关闭。

在客户端,您在客户端代理上具有相同的.Close().Abort()方法,其行为方式相同。