【问题标题】:2 WCF Services and c# threading2 WCF 服务和 c# 线程
【发布时间】:2012-04-18 19:54:23
【问题描述】:

我正在尝试编写尽可能快速可靠地导入大量数据的代码。使用线程,我已经能够加快我在本地机器上编写的导入代码的速度,但是当我在远程服务器上运行它时,它似乎有一些 WCF 问题......

我有两个 WCF 服务实现:Service1 和 Service2。

基本上这是工作流程:

Parallel.ForEach(objectData.Tables[0].Rows.Cast<DataRow>(), dataRow =>
{
...
    Service1.ImportObjectFirstPart(ObjectToEnter);
...
    Service2.ImportObjectSecondPart(ObjectToEnter);
}

Service1 调用大约需要 3 秒,而 service2 需要大约 7 秒,无论是远程还是本地。然而,在我的本地机器上,对 service2 的调用在大约 20 次 service1 调用后开始。在服务器上,几乎每个 service1 调用都在第一个 service2 调用开始之前完成。 (这两个服务都是作为 PerCall 实现的)。

调用服务的代码按预期使用了 99% 的 CPU 一段时间,然后慢到爬行,然后我必须自己退出。知道可能出了什么问题吗?

谢谢,

【问题讨论】:

  • 似乎 Service2 正在等待 Service1 在开始之前完成所有调用,我很好奇为什么会这样。
  • Per this answer 有一个类似的问题,这些服务的并发模式是什么?
  • 服务是否与导入代码位于同一台服务器上?如果是这样,与运行导入代码相比,单独的 WCF 服务(例如从笔记本电脑运行时)对 CPU 的影响是什么?
  • 抱歉不清楚,我的服务是用 percall 的 instancecontextmode 实现的。
  • 服务是如何托管的?它是否在远程机器上的 IIS 上?如果可能的话,看看你的配置可能会很有趣。

标签: c# .net multithreading wcf parallel-processing


【解决方案1】:

你试过了吗

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]

你可以在这里阅读详细信息

http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx

默认是单一的,所以你应该期望你得到的行为是非常合理的。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    相关资源
    最近更新 更多