【问题标题】:WCF service parallel processingWCF 服务并行处理
【发布时间】:2016-07-16 23:42:04
【问题描述】:

我有一个系统,它从 WCF 网络服务请求数据 是这样的:

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

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

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

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

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

这并不能 100% 解决问题

请指教

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

    来自source

    在 PerCall 实例中,并发是不相关的,因为每个 消息由新的 InstanceContext 处理,因此永远不会 InstanceContext 中有多个线程处于活动状态。

    归根结底,因为您使用的是PerCall 激活,所以添加ConcurrencyMode.Multiple 毫无意义,因为每个传入请求都会获得自己的服务类实例来处理其请求。

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

    编辑

    来自另一个SO 帖子。

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

    就性能而言:PerCall 服务是 ConcurrencyMode.Multiple 应该稍微快一些,因为它不是 创建和获取(不需要的)线程锁 ConcurrencyMode.Single 正在使用。

    【讨论】:

    • 我从这篇文章中获取了这个配置,它说它推迟了linkedin.com/pulse/…
    • 我读过那篇文章。我的答案仍然成立。性能增益可以忽略不计。您应该尝试确定性能问题的根本原因。为什么你需要调用 3 个 WCF 服务,而其中只有一个真正在做某事。
    • 是的,我知道这听起来很奇怪,但是在我们公司,有很多防火墙所以.. 无论如何,即使我一对一打电话,问题仍然存在,因为服务会调用服务....只有一个客户端会调用服务,所以问题是一样的所以如果我理解你,这个配置不会影响性能,我应该检查服务代码而不是服务配置?
    • 正确。您应该查看服务代码并确定性能问题的根本原因。
    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多