gpt4 book ai didi

wcf - WCF ChannelFactory 和连接超时的最佳实践

转载 作者:行者123 更新时间:2023-12-04 08:27:41 25 4
gpt4 key购买 nike

我正在开发一个 winform 应用程序,它将访问作为 Windows 服务自托管的 WCF 服务。我使用的是 ChannelFactory 而不是服务引用。我已经成功连接和调用了WCF服务。问题是当我让应用程序保持空闲 20 分钟,然后尝试调用另一个电话时。我收到以下错误:

“套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或底层网络资源问题造成的。本地套接字超时为 '00:00:59.9489970'。”

我正在寻找管理连接的最佳实践。我目前创建了一个名为 PrepareWCFConnection(见下文)的函数,用于检查 channel 和 ChannelFactory 的状态。在对 WCF 服务进行任何调用之前,我会调用此方法。有没有更好的方法来处理这个?

     public bool PrepareWCFConnection()
{
if ((channelFactory == null) ||
(channelFactory.State == CommunicationState.Faulted) ||
(channelFactory.State != CommunicationState.Opened))
{
channelFactory = new ChannelFactory<IService1>(new NetTcpBinding(), endpointAddress);
}


if ((proxy == null) ||
(((IClientChannel)proxy).State == CommunicationState.Faulted) ||
(((IClientChannel)proxy).State != CommunicationState.Opened))
{
proxy = channelFactory.CreateChannel(endpointAddress);
((IClientChannel)proxy).Open();
}

return true;
}

最佳答案

如果您想重用现有 channel ,您需要通过每 9 分钟 ping 一次服务来保持 channel 处于事件状态。我认为默认接收超时为 10 分钟,因此如果 channel 保持空闲超过此时间,则会断开连接。或者您可以使用可靠的 session 来保持 channel 活跃。

如果您不需要在同一个 channel 上回调,最好在完成后关闭 channel 并为每个服务操作重新创建一个新 channel 。创建 channel 并不昂贵。您可以缓存 channel 工厂,但是为每次通话创建 channel 。

关于wcf - WCF ChannelFactory 和连接超时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8538654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com