我有一个系统,它从WCF Web服务请求数据 就像这样:
WCF1调用WCF2,WCF2调用WCF3和WCF3完成其工作并返回响应
我的问题是一些操作需要很长时间“约2分钟”来处理
因此,如果WCF1发送一个需要很长时间的请求,然后另一个来自WCF1的请求需要一秒钟,那么它将等到第一个请求完成
我读到了这个问题,一些用户说要使用
<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple, InstanceContextMode:=InstanceContextMode.PerCall)> _
这并不能解决问题100%
请你指点一下
答案 0 :(得分:0)
我不认为这些设置会解决您的问题。
来自source:
在PerCall实例化中,并发性并不重要,因为每个 消息由新的InstanceContext处理,因此从不 InstanceContext中有多个活动线程处于活动状态。
底线,因为您正在使用PerCall激活,所以添加ConcurrencyMode.Multiple是没有意义的,因为每个传入请求都将获得自己的服务类实例来处理其请求。
您应该尝试缩小导致性能问题的原因。查看WCF服务正在调用的基础代码。
修改强>
来自另一个SO帖子。
就行为而言:ConcurrencyMode对于PerCall无关紧要 服务实例。
在性能方面:PerCall服务 ConcurrencyMode.Multiple应该稍快一点,因为它不是 创建并获取(不需要的)线程锁 ConcurrencyMode.Single正在使用。