WCF分布式开发常见错误(20):TimeoutException was unhandled

Posted on 2009-07-22 22:50 Frank Xu Lei 阅读(1533) 评论(14)   编辑 收藏 网摘 所属分类: WCF分布式开发常见错误, SOA and EAI
   在进行WCF应用程序开发的时候,如果大量客户端发送请求到WCF服务,往往会出现这个异常,超时。WCF服务响应超时。没有在指定的时间00:01:00内打开操作,分配给这个操作的时间或许只是超时时间的一部分。
  错误信息如下:
   The open operation did not complete within the allotted timeout of 00:01:00. The time allotted to this operation may have been a portion of a longer timeout.
【1】错误截图:

【2】原因分析:
    这个超时异常的产生,直接导致的原因是,大量的客户端请求发送给服务。我这里使用的100个客户端,实例化100个代理。然后请求。模拟客户端的大量并发请求。服务基本延时100MS。模拟处理。这里大概在10个请求的时候,服务处理出现阻塞。进而等待,最后出现超时异常。
【3】解决办法:
    涉及到大量请求的时候,可以考虑使用WCF的 ServiceThrottlingBehavior 属性。
名称说明
ms522194.pubproperty(zh-cn,VS.90).gifMaxConcurrentCalls获取或设置一个值,该值指定整个 ServiceHost 中正在处理的最多消息数。
ms522194.pubproperty(zh-cn,VS.90).gifMaxConcurrentInstances获取或设置一个值,该值指定服务中可以一次执行的最多 InstanceContext 对象数。
ms522194.pubproperty(zh-cn,VS.90).gifMaxConcurrentSessions获取或设置一个指定 ServiceHost 对象可一次接受的最多会话数的值。
  这里我们设置一下服务的限流行为就可以了。具体如下:
serviceBehaviors >
        
< behavior name = " WCFService.WCFServiceBehavior " >
          
< serviceTimeouts transactionTimeout = " 00:01:00 " />
          
< serviceMetadata httpGetEnabled = " true "   />
          
< serviceDebug includeExceptionDetailInFaults = " false "   />
          
< serviceThrottling maxConcurrentCalls = " 1000 "  maxConcurrentInstances = " 1000 "  maxConcurrentSessions = " 1000 " />-->
        
</ behavior >
      
</ serviceBehaviors >
   
   这里1000可以修改,根据你的实际WCF服务需求量。服务激活类型和实例调用方式。然后进行调整。修改完毕以后,重新启动服务,基本就正常了。
   最后是Demo程序下载: /Files/frank_xl/7.WCFServiceConcurrencyClientsFrankXuLei.rar
参考文章: http://msdn.microsoft.com/en-us/library/system.servicemodel.description.servicethrottlingbehavior_properties.aspx


 

老徐的博客

【作者】:Frank Xu Lei

【地址】:http://www.cnblogs.com/frank_xl/archive/2009/07/22/1528911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值