我有一个我编写的WCF服务,它托管在Windows服务中。它以PerSession模式运行。该服务允许客户端通过该服务打开文件,更改文件和远程关闭文件。到目前为止,所有工作都非常顺利。
当Windows服务停止时,我希望能够让WCF服务不接受任何新会话,并允许已连接的客户端完成当前会话并工作(在合理的时间段/超时内)。
实现这一目标的最佳方法是什么?
答案 0 :(得分:8)
基本上,调用ServiceHost.Close()
将完成此操作 - 它将使所有当前正在运行的请求运行完成,但新请求将被拒绝,并且有序关闭正在进行中。
您为服务配置的绑定上有一个“CloseTimeout”设置 - 它控制WCF运行时允许运行请求所需的时间,直到它们正确关闭为止。如果发生超时,仍将运行仍在运行的请求。
另一方面,ServiceHost.Abort()
方法是大锤的数字等效方法 - 所有正在运行的请求都会立即终止,主机也会关闭。
在客户端,您在客户端代理上具有相同的.Close()
和.Abort()
方法,其行为方式相同。