WCF服务并行处理

时间:2016-07-14 10:13:09

标签: wcf

我有一个系统,它从WCF Web服务请求数据 就像这样:

WCF1调用WCF2,WCF2调用WCF3和WCF3完成其工作并返回响应

我的问题是一些操作需要很长时间“约2分钟”来处理

因此,如果WCF1发送一个需要很长时间的请求,然后另一个来自WCF1的请求需要一秒钟,那么它将等到第一个请求完成

我读到了这个问题,一些用户说要使用

<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple, InstanceContextMode:=InstanceContextMode.PerCall)> _

这并不能解决问题100%

请你指点一下

1 个答案:

答案 0 :(得分:0)

我不认为这些设置会解决您的问题。

来自source

  

在PerCall实例化中,并发性并不重要,因为每个   消息由新的InstanceContext处理,因此从不   InstanceContext中有多个活动线程处于活动状态。

底线,因为您正在使用PerCall激活,所以添加ConcurrencyMode.Multiple是没有意义的,因为每个传入请求都将获得自己的服务类实例来处理其请求。

您应该尝试缩小导致性能问题的原因。查看WCF服务正在调用的基础代码。

修改

来自另一个SO帖子。

  

就行为而言:ConcurrencyMode对于PerCall无关紧要   服务实例。

     

在性能方面:PerCall服务   ConcurrencyMode.Multiple应该稍快一点,因为它不是   创建并获取(不需要的)线程锁   ConcurrencyMode.Single正在使用。