首页 新闻 搜索 专区 学院

WCF REST 并发数据 服务端接收延迟

0
悬赏园豆:10 [待解决问题]

在本地测试,使用WebServiceHost 开启服务。

本地并发了100个线程 访问服务。从服务端传回的数据来看。服务端接收数据延迟了。

也就是说假如所有线程都是在

1-3秒内把数据都发送到服务端。

总共耗时3秒。

服务端的服务,获取到数据确是在1-20秒之间。

也就是最晚的第20秒才接收到服务。

 

服务端也已经设定ConcurrencyMode = ConcurrencyMode.Multiple

使用的是并发模式。

所以猜测是阻塞到什么地方了。求解

问题补充:

感觉是他的默认并发线程数达不到?默认并发线程数上限是多少?

Songlw的主页 Songlw | 初学一级 | 园豆:110
提问于:2013-11-28 23:48
< >
分享
所有回答(2)
0
2012 | 园豆:21089 (高人七级) | 2013-11-29 09:01

谢了。设置一下ThreadPool好了点

支持(0) 反对(0) Songlw | 园豆:110 (初学一级) | 2013-11-29 11:42
0

请确保你的实例化模式不是PerCall

具体原因看下面:

  • PerSession:为每个新的客户端会话创建一个新的 InstanceContext(以及相应的服务对象),并在该会话的生存期内对其进行维护(这需要使用支持会话的绑定)。

  • Single:单个 InstanceContext(以及相应的服务对象)处理应用程序生存期内的所有客户端请求。

并发的使用与实例化模式有关。在 PerCall 实例化过程中,与并发没有关系,因为每个消息都由一个新的 InstanceContext 处理,因此 InstanceContext 中处于活动状态的线程永远都不会超过一个。

 

会话和 InstanceContext 根据协定中 SessionMode 枚举的值和服务实现上的 System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode 属性的组合进行交互,该组合控制着通道和特定服务对象之间的联系。

悟行 | 园豆:12429 (专家六级) | 2013-11-29 11:22

是single模式。貌似framework默认是0.5秒启动一个线程,所以设置一下ThreadPool就好多了。

支持(0) 反对(0) Songlw | 园豆:110 (初学一级) | 2013-11-29 11:45

相当感谢

支持(0) 反对(0) Songlw | 园豆:110 (初学一级) | 2013-11-29 11:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册