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 属性)并确保服务能够连接到客户端。"}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值