Wcf 每次调用服务应用程序后关闭客户端通道

Wcf 每次调用服务应用程序后关闭客户端通道,wcf,wcf-client,duplex-channel,Wcf,Wcf Client,Duplex Channel,我已经开始使用WCF开发客户机-服务器分布式应用程序。客户机还应该向服务器发送请求,因此我选择使用NetTcpBinding实现双工操作,因为所有客户机都将在同一个intranet上运行 在服务器端,对于实现服务器契约的服务类,我使用以下设置 [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single, UseSynchronizationC

我已经开始使用WCF开发客户机-服务器分布式应用程序。客户机还应该向服务器发送请求,因此我选择使用NetTcpBinding实现双工操作,因为所有客户机都将在同一个intranet上运行

在服务器端,对于实现服务器契约的服务类,我使用以下设置

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext = false)]
每次初始化客户机时,我都会创建一个代理类的实例,该代理类是通过在VisualStudio中使用
“添加服务引用”
选项添加服务而生成的。初始化代理后,我向服务器发送一条
Connect
消息:

 _proxy.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
 _proxy.InnerChannel.Closing += new EventHandler(InnerChannel_Closing);
 //send a connect message to the server
 _proxy.ClientConnected(ClientHostName, Version, ClientID, ClientIP); 
现在,服务器通过使用

OperationContext.Current.GetCallbackChannel<IClientEvents>()
我现在正努力为我的场景找到最合适的实现:

  • 服务呼叫后不关闭频道。这样,一旦与服务器的连接中断(例如,间隔1分钟),客户端将始终尝试重新创建通道。但是一直保持频道开放没有多大意义,所以我不太确定这种方法
  • 每次呼叫后关闭频道并在向服务器进行新呼叫时重新创建频道。这在进行服务调用时可以正常工作,但是如果服务器希望向客户端发送通知,会发生什么情况呢?服务器端的回调引用将不再有效,我必须等待客户端发送新的connect消息来获取新的回调引用,对吗?在这种情况下,我是否应该定期对服务器进行类似于Ping()的不同调用,以确保服务器始终可以联系客户机
  • 我仍在阅读有关WCF双工操作的资料,只是无法决定哪种方法更好,以免以后遇到问题

    谢谢你的建议

    This could be because a client failed to close a sessionful channel within the required time.