• WCF之并发,吞吐量和限流


    • 并发
      • Single重入模式.对于每一个服务实例,同一时刻只能处理一个请求,其他对该实例的请求被排队.
        • PerCall,每一线程会分配一个新的服务实例上。不会有并发性问题。不影响吞吐量.
        • PerSession,保护服务实例不会受到多线程客户端的影响.多客户端可以并发访问,无并发性问题。减少单一客户端吞吐量.
        • Singleton, 实例不受任何并发访问影响。多线程和多客户端都无法并发访问。吞吐量最小.
      • Retrant重入模式.
        • 客户端可以对同一服务实例,可以进行第2次或者多次的请求进入。
        • 单线程,用于回调不是One_way,当服务退出时释放锁以发起回调.
        • PerCall: SingleMode中。调用回调时,当回调完成返回到Service时,由于不可重入,被挡在外面等待。WCF会在该情况时。异常。
        • Reentrant:回调的调用可以进入Service的实例中。不会有死锁.
        • PerSession:允许多线程客户端并发访问.单件:允许任何线程调用服务实例.
        •  
      • Multip重入模式
        • 可以增大吞吐量,当服务实例进行处理时,系统不会自动加锁,对临界资源手动处理.
        • 分别对Cache/Session共享状态/服务实例进行加锁.
        •  
    • 限流
      • 通过ServiceThrottle进行配置.每一个Session对应一个实例,但不是每一个实例对应一个Session,所以Session个数<实例数量.
      • 跨服务主机的负载平衡能力对可扩展性有影响.会话影响负载平衡:党没有会话时,请求可以被分配到任何主机上,对于传输层会话,需要Sticky IP.对于其他的会话,需要Sticky会话.
    • WCF对于Stream操作规定了一些限制.
      • 1)只有部分绑定支持,而且在使用Stream操作时,不能使用Reliable Messaging.
      • 2)对于Stream对象本身,FileStream是不可序列化的,当我们把一个FileStream对象作为Stream类型返回给客户端,在客户端,我们仅仅能够使用Stream类型,而不能转化为原本的FileStream类型.而且Stream.Length的调用会抛出异常,原因是不支持Length属性的序列化.
      • 3)必须修改TransferMode的值.
      • 4)Stream对象的大小不能超过MaxReceivedMessageSize的设置,该属性的最大值为Int.MaxValue.
      • 5)涉及Stream的操作的返回值,参数,ref,out参数中只能有一个是Stream对象.
      • 6)Stream不支持Session,按照Session的配置得到的结果仍然是PerCall.另外,Stream对象可能较大,所以应该增大绑定的SendTimeout.
  • 相关阅读:
    快速分栏
    伪元素:before和:after的简单应用——清除浮动
    C# 调用事件
    C# 创建文件夹
    (C#-VisionPro)用代码方式新建VisionPro视觉文件(.vpp)
    C# 选择下拉框文件时触发
    C# 将指定目录下的文件夹名称加载到下拉框中
    (C#-VisionPro)用C#加载、保存ViaionPro的'.vpp'文件
    C# 关闭程序时保存程序数据
    (C#-VisionPro)用C#调用VisionPro保存的.vpp文件
  • 原文地址:https://www.cnblogs.com/robyn/p/3781391.html
Copyright © 2020-2023  润新知