WCF节流设置

时间:2012-01-05 16:55:17

标签: c# wcf msmq

我一直在使用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(已更改为多个)与ReleaseServiceInstanceOnTransactionComplete设置一起修改。改为多人似乎没有改变什么?

修改 它可能是TransactionBatch设置吗?我把它设置为一个......?

谢谢,

取值

2 个答案:

答案 0 :(得分:4)

我找到了一个博客,向我指出了一些关于WCF限制/性能的好文档。我在处理应用程序中添加了一些元输出,并且能够获得我想要的性能。通过向我的进程(ManagedThreadID等)添加更多信息,我可以看到我获得的吞吐量比我原先假设的要多得多。我还在下面的博客中发现了一些有用的提示。

Blog

谢谢,

S

答案 1 :(得分:0)

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

BTW ...除非您使用InstanceContextMode.PerCall,否则WCF将在多个线程上调用您的实例。 InstanceContextMode.PerCall +任何ConcurrencyMode = N个服务实例上方法的并发调用,其中N由服务限制Reference确定