如何使用ServiceThrottling调整WCF服务以获得更好的性能

Ana*_*nth 5 .net c# wcf

我是WCF服务的新手.

我们有一个收听MSMQ的服务.对于服务,maxConcurrentInstances和maxConcurrentSessions设置为1.这会导致队列中的大量消息和消息缓慢提供.

serviceThrottling元素中maxConcurrentInstancesmaxConcurrentSessions属性之间的区别是什么.

目前,需要10分钟来处理120个非常慢的消息.

什么应该是提高服务性能的理想值.

提前致谢

Joh*_*ais 5

maxConcurrentInstances:无论并发模式和实例上下文模式如何,可以同时服务请求的服务类实例的最大数量。

maxConcurrentSessions:同时活动的 WCF 会话的最大数量。


假设并发模式设置为NO多线程。

IF Instance context mode = Per session 
   THEN  Max number of requests processed in parallel = Min(maxConcurrentInstances, maxConcurrentSessions)

IF Instance context mode = Per call 
   THEN Max number of requests processed in parallel = maxConcurrentInstances

IF Instance context mode = Single 
   THEN Max number of requests processed in parallel = 1
Run Code Online (Sandbox Code Playgroud)

假设并发模式设置为多线程。

单个实例现在可以处理多个请求,但您必须注意并发问题。


重要的问题是:如何选择实例上下文模式?

  • 您对多线程编程没有信心:坚持使用PerSessionPerCall
  • 您不需要在来自同一客户端的调用之间将数据保留在服务级别:避免 PerSession
  • 创建服务的新实例成本非常高:使用Single但要准备好处理并发问题。

之后,需要调整最大实例数(对于 PerCall)和会话数(对于 PerSession)。通常,您首先将其设置为任意数字(例如 100),然后看看它是否会使速度更快。如果是这样,那就好了。如果没有,请检查您的实例创建速度是否足够快。