为啥托管在 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 服务会在一段时间后死掉的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IIS 中正确托管连接到 SQLServer 的 WCF 数据服务?为啥我会收到错误消息?
使用移动设备访问托管在 Windows 服务中的 WCF 服务