WCF - “MaxConcurrentCalls”和“MaxConcurrentSessions”属性之间的区别

5

阅读完 http://msdn.microsoft.com/en-us/library/system.servicemodel.description.servicethrottlingbehavior.maxconcurrentsessions.aspxhttp://msdn.microsoft.com/en-us/library/system.servicemodel.description.servicethrottlingbehavior.maxconcurrentcalls.aspx 后,我得出以下结论:

MaxConcurrentSessions 是每个客户端排队会话的数量(默认值为 10);
MaxConcurrentCalls 是服务上活动连接的数量(默认值为 16),即任何时候访问服务的所有客户端,这意味着如果两个客户端各做了 10 次调用,那么就有 4 次调用需要在队列中等待处理。

问题:

  1. 我的结论是否正确?
  2. MaxConnections 如何与这些交互?
  3. MaxConnections 是否优先于MaxConcurrentX设置?

(注意:我正在使用 .NET 3.5)

1个回答

9

MaxConcurrentCalls 与服务中当前正在执行的调用数量有关。

MaxConnections 与服务上打开的连接总数有关,无论服务是否为连接执行任何操作。

例如,如果客户端打开到服务的连接,调用方法并等待方法返回,则会计入 MaxConcurrentCalls。一旦服务返回响应以响应客户端的方法调用,它将不再计入 MaxConcurrentCalls……即使您没有关闭客户端代理。假设您没有关闭客户端代理,则该连接将计入服务上的 MaxConnections,因为您仍然保持连接处于打开状态,但它当前未在服务上执行任何操作,因此它不会计入 MaxConcurrentCalls


这非常有道理。如果我有每次调用服务实例模式,我可以忽略MaxConcurrentSessions吗? - ghostJago
1
不,我不会忽略MaxConcurrentSessions。根据您的绑定和配置,每个连接可能会自动创建一个会话。例如,默认情况下,wsHttpBinding将导致为每个连接创建一个会话。换句话说,每次在客户端代理上调用Open()时,都会创建一个会话。该会话直到关闭客户端代理后才会被销毁。 - ChrisNel52

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接