为啥托管在 Windows 服务内的 WCF 服务会在一段时间后死掉

Posted

技术标签:

【中文标题】为啥托管在 Windows 服务内的 WCF 服务会在一段时间后死掉【英文标题】:Why WCF Service hosted inside windows service dies after some time为什么托管在 Windows 服务内的 WCF 服务会在一段时间后死掉 【发布时间】:2012-05-23 02:10:04 【问题描述】:

我使用 C# 在 Windows 服务中托管了 WCF 服务。它工作正常,我能够从客户端应用程序与 WCF 服务进行通信。

但问题是如果我让客户端闲置 10 分钟左右,然后尝试再次连接,我会收到以下错误

服务器堆栈跟踪: 在 System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen() 在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作, Boolean oneway, ProxyOperationRuntime 操作, Object[] ins, Object[] 出局,TimeSpan 超时)

【问题讨论】:

您应该向我们展示准确且完整的异常消息 - 而不仅仅是堆栈跟踪..... 【参考方案1】:

关闭的不是 Windows 服务,而是您的客户端代理。

你说你让客户闲着。你不应该这样做。在您提出请求后,您应该关闭客户端。然后在需要时打开它。

【讨论】:

【参考方案2】:

当您的服务绑定 ReceiveTimeout 设置保留为默认值(10 分钟)时,就会发生这种情况。

要将其设置为“永远”,您可以在配置文件中进行设置:

ReceiveTimeout = "infinite"

或通过代码:

binding.ReceiveTimeout = TimeSpan.MaxValue;

【讨论】:

以上是关于为啥托管在 Windows 服务内的 WCF 服务会在一段时间后死掉的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Worker 角色中托管 WCF 服务

如何在 IIS 中正确托管连接到 SQLServer 的 WCF 数据服务?为啥我会收到错误消息?

使用移动设备访问托管在 Windows 服务中的 WCF 服务

我们啥时候应该在 IIS 中托管 WCF 服务,啥时候应该在 Windows 服务中托管?

我可以在 Windows 服务中托管 WCF 服务吗?

Windows 窗体中的 WCF 数据服务托管