我正在开发一个 winform 应用程序,该应用程序将访问作为 Windows 服务自托管的 WCF 服务。我使用的是 ChannelFactory 而不是服务参考。我已经成功连接和调用了WCF服务。问题是当我让应用程序保持空闲 20 分钟,然后尝试拨打另一个电话时。我收到以下错误:
“套接字连接被中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或底层网络资源问题造成的。本地套接字超时为 '00:00:59.9489970'。”
我正在寻找管理连接的最佳实践。我目前创建了一个名为 PrepareWCFConnection(见下文)的函数,用于检查通道和 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;
}