none
MaxConcurrentCalls和 ConcurrencyMode.Multiple区别和联系 RRS feed

答案

  • MaxConcurrentCalls 如果把它设为 15 

      我的理解是:  在会话服务里面.  只能够同时容纳15个方法调用

    老徐  我理解的对不...  
    学习者

    你设置为15的话,其实就是服务托管宿主同事并发最多处理15个消息。也可以理解为15个方法调用。
    各个客户端可以在不同的机器上,也可以再一个机器上。单调服务,单例服务都可以。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年10月19日 11:37
    版主

全部回复



  •    MaxConcurrentCalls 最大并发调用数. 我个人的想法是只有在ConcurrencyMode.Multiple才会起作用.

       如果是.ConcurrencyMode.Single的话。 这个MaxConcurrentCalls 应该没有用。

       这只是我个人的理解。 不知是否准确?  
    学习者
    2009年10月16日 15:32
  • 不太准确。
    这个是个很好的问题。
    我把这个问题转发过来了。也是为了给大家一个参考。
    学习WCF很久,这个问题也是很容易忽略的。一起讨论一下会有收获,也希望大家补充~

    1.MaxConcurrentCalls 获取或设置一个值,该值指定整个 ServiceHost 中正在处理的最多消息数。 最大并发调用数目,默认16。
    这个属于服务限流行为。这个考虑问题是从整个ServiceHost 角度来说的。
    前面一个文章讨论过。http://www.cnblogs.com/frank_xl/archive/2009/07/22/1528911.html
    2.ConcurrencyMode.Multiple:服务实例是多线程的。无同步保证。因为其他线程可以随时更改服务对象,所以必须始终处理同步与状态一致性。这个考虑问题是针对线程访问单个的服务示例。
    3.限流由ServiceThrottlingBehavior类定义,包括三个重要的属性: MaxConcurrentCalls、MaxConcurrentSessions、MaxConcurrentInstances,它们分别的默认值为16,10和26

    4.服务实例化类别:单调服务(Call Service),会话服务(Sessionful Service),单例服务(Singleton Service)。
    当单例服务:只有一个服务实例,针对ServiceHost 的限流设置都会作用到一个服务实例上。
    会话和单调:服务实例个数不定,针对针对ServiceHost 的限流设置会作用到全部的服务实例上。
    而单个服务实例线程的并发访问模式ConcurrencyMode,则是不变的。 Single、Reentrant 与 Multiple 来决定服务实例如何被线程访问。
    5.再回头理解上面的话,相对容易一些。单个服务实例的线程访问模式是ConcurrencyMode.Multiple。但是这个也受到最大MaxConcurrentCalls的制约。因为它决定了整个 ServiceHost 中正在处理的最多消息数。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年10月16日 17:25
    版主
  • MaxConcurrentCalls 如果把它设为 15 

      我的理解是:  在会话服务里面.  只能够同时容纳15个方法调用

    老徐  我理解的对不...  
    学习者
    2009年10月19日 10:57
  • MaxConcurrentCalls 如果把它设为 15 

      我的理解是:  在会话服务里面.  只能够同时容纳15个方法调用

    老徐  我理解的对不...  
    学习者

    你设置为15的话,其实就是服务托管宿主同事并发最多处理15个消息。也可以理解为15个方法调用。
    各个客户端可以在不同的机器上,也可以再一个机器上。单调服务,单例服务都可以。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年10月19日 11:37
    版主


  •    ... 又搞清楚了一个问题..   谢谢    
    学习者
    2009年10月20日 11:36