【问题标题】:WCF Throttle SettingsWCF 节流设置
【发布时间】:2012-02-03 12:10:27
【问题描述】:

我一直在使用 WCF 和 MSMQ 进行概念验证。我一直在使用默认值This Article 来调整油门设置,并将我自己的设置添加到配置文件中。我有 2 个四核 Xeon CPU 运行这个应用程序。无论我应用什么设置,它总是一次只能抓取 8 条消息(与我的处理核心匹配)。我希望在单个事务中处理每条消息,以便这可能是问题的一部分……不确定。我只是假设它会同时处理比实际更多的消息。

服务行为:

   [ServiceBehavior(UseSynchronizationContext = true,
                     ReleaseServiceInstanceOnTransactionComplete=true,
                     ConcurrencyMode = ConcurrencyMode.Single,
                     InstanceContextMode = InstanceContextMode.PerCall)]

端点行为:

  <endpointBehaviors>
    <behavior name="endpointBehavior">
      <transactedBatching maxBatchSize="1" />
    </behavior>
  </endpointBehaviors>

我自己的服务限制:

<serviceThrottling maxConcurrentCalls="128" maxConcurrentSessions="800" />

我是否忽略了什么?也许我只是不完全理解默认/自定义油门设置(可能)。

编辑

我已经修改了 ConcurrencyMode(更改为 Multiple)以及 ReleaseServiceInstanceOnTransactionComplete 设置。更改为 Multiple 似乎没有任何改变?

编辑 可能是 TransactionBatch 设置?我已经设置为一个...?

谢谢,

S

【问题讨论】:

  • 嗨@JohnBreakwell 我已将并发模式更改为 Multiple 并且似乎实现了相同的结果?

标签: c# wcf msmq


【解决方案1】:

我发现一个博客向我指出了一些关于 WCF 节流/性能的优秀文档。我向我的处理应用程序添加了更多元输出,并且能够获得我正在寻找的性能。通过向我的进程(ManagedThreadID 等)添加更多信息,我可以看到我获得的吞吐量比我最初假设的要多得多。我还发现以下博客中的一些提示很有帮助。

Blog

谢谢,

S

【讨论】:

    【解决方案2】:

    由于您正在运行 PerCall 实例化,您应该增加 MaxConcurrentInstances。即使在 .Net 4 中,默认值也是 26。在 4.5 中“默认值是 MaxConcurrentSessions 的默认值和 MaxConcurrentCalls 的默认值之和..”

    顺便说一句...除非您使用 InstanceContextMode.PerCall,否则 WCF 将在多个线程上调用您的实例。 InstanceContextMode.PerCall+Any ConcurrencyMode = N个服务实例上方法的N次并发调用,其中N由服务油门决定Reference

    【讨论】:

    • 我认为你所说的 PerCall/Single thread 是不正确的。所有服务实例都将在同一个线程上创建,从而同步执行。您可以在 [screenshot here](codeproject.com/KB/WCF/WCFConcurrency.aspx#Instance mode = per Call and Concurrency = Multiple)中亲自查看。那篇博文非常有用,值得一读。
    • hmmmmmm 我只是在评论结尾处重复引用该参考文献中的陈述。
    猜你喜欢
    • 2014-12-11
    • 2016-12-25
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多