WCF通讯经常出现的超时问题,以及解决方法

WCF通讯经常出现超时问题

第一种超时问题:

客户端与服务端建立连接的时候如果没有设定参数,默认客户端在10分钟内没有与服务端通讯,则连接会断开,提示连接超时问题

解决方法一

客户端保留连接信息,使用try catch语句捕获异常,在catch语句中重新与服务端建立连接

解决方案二

客户端在建立连接的时候就设定参数,但是长连接也会占用系统性能,视连接数量而定,保持太多连接没有什么好处

            param.CloseTimeout = TimeSpan.MaxValue;
            param.ReceiveTimeout = TimeSpan.MaxValue;//client return if oneway = false
            param.SendTimeout = TimeSpan.MaxValue;//service call client if oneway = false
            param.OpenTimeout = TimeSpan.MaxValue;
            param.BindingMaxBufferSize = int.MaxValue;
            param.BindingMaxReceivedMessageSize = int.MaxValue;

第二种超时问题:

服务端在回调客户端的时候,如果IsOneWay = True,同步回调,默认情况下1分钟后会提示回调超时,一般这种情况是由于服务端挂在UI线程中,当你执行回调的时候UI线程就卡住了,一直处于等待返回的状态,而这个时候即使客户端回调返回,挂在UI线程中的服务端也不会收到通知,直到超时

{"发送到 http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous 的请求操作在配置的超时(00:00:59.9969999)内未收到回复。分配给此操作的时间可能已经是更长超时的一部分。这可能由于服务仍在处理操作或服务无法发送回复消息。请考虑增加操作超时(将通道/代理转换为 · 并设置 OperationTimeout 属性)并确保服务能够连接到客户端。"}

解决方法就是,把服务端的回调放在线程中,并通过事件通知客户端返回结果。如果是循环回调的话,可以在事件中再次调用这个循环方法,而循环在回调处就退出,用事件来触发循环

猜你喜欢

转载自blog.csdn.net/gao271003105/article/details/80886971