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

Ela*_*lan 6 session wcf windows-services

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

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

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

mar*_*c_s 8

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

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

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

在客户端,你有相同的.Close(),并.Abort()在客户端代理方法,它们的行为方式相同.