zoukankan      html  css  js  c++  java
  • WCF学习笔记之并发与限流

    最近一直在学习WCF相关知识;本文章将针对并发与限流知识进行一个梳理,由于很多理论的知识所以做一个简单的记录,为今后回顾做一个记录;

    一:并发知识

    WCF将服务实例封装在一个称为实例上下文的对象中,并发是指同一个服务实例上下文同时处理多个服务调用请求;

    WCF提供三种不同的实例上下文模式分别为:Per-Call,Per-Session和Single

    WCF并发属于服务自身的行为;因此通过服务行为[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single)]进行定义;

         [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single)]

         public class CalculatorService:ICalculator{ }

    WCF并发有三种典型策略分别为:Single(默认),Reentrant和Multiple;定义在System.ServiceModel.ConcurrencyMode枚举进行定义;

    (1)Single:此策略是默认形式,一个实例上下文在某个时刻只能用于对单一请求的处理;多个并发的请求会以一种串行的方式进行处理;

    (2)Reentrant:此策略跟Single类似;差别是如果服务操作在执行过程中涉及对客户端回调,该实例上下文可以用于其他服务调用请求;

    (3)Multipe:一个实例上下文可以同时处理多个服务请求;

    回调中的并发:要么极用单向(One-Way)的方式进行回调,要么将服务的并发模式设置为Reentrant或Multiple;

                  应用在回调类型上[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]

    二:限流知识

    流量限制是为了实现对现有资源有效利用,从而达到确保服务的可用性和提高整体吞吐的目的;

    通过设置ServiceThrottingBehavior三个可读写属性:MaxConcurrentCalls,MaxConcurrentInstances和MaxConcurrentSeesions;

            分别代表流量的三个阈值;这三个属性是针对某个ServiceHost宿主而言;[WCF版本不同默认值大小不一样];

    (1)MaxConcurrentCalls(默认值16,双核32):当前ServiceHost能够处理的最大并发消息数量;

    (2)MaxConcurrentInstances(默认值116,双核232):当前ServiceHost允许存在的服务实例上下文的最大数量;

    (3)MaxConcurrentSessions(默认值100,双核200):当前ServiceeHost允许的最大并发会话数量;

      编程方式:

                using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
                {
                    ServiceThrottlingBehavior throttlingBehavior = host.Description.Behaviors.Find<ServiceThrottlingBehavior>();
                    if (null == throttlingBehavior)
                    {
                        throttlingBehavior = new ServiceThrottlingBehavior();
                        host.Description.Behaviors.Add(throttlingBehavior);
                    }
                    throttlingBehavior.MaxConcurrentCalls = 50;
                    throttlingBehavior.MaxConcurrentInstances = 30;
                    throttlingBehavior.MaxConcurrentSessions = 20;
                    host.Open();
                }

    配置方式(宿主):

     <behaviors> 
        <serviceBehaviors> 
          <behavior name="throttlingBehavior"> 
             <serviceThrottling maxConcurrentCalls="50" maxConcurrentInstances="30" maxConcurrentSessions="20" />
          </behavior> 
        </serviceBehaviors>
     </behaviors> 

    最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

  • 相关阅读:
    对软件工程的困惑
    团队作业(七)
    团队作业(六)
    团队作业(五)
    团队作业(四)
    团队作业(三)
    团队作业(二)
    团队作业(一)
    代码
    课余作业 采访
  • 原文地址:https://www.cnblogs.com/wujy/p/3231251.html
Copyright © 2011-2022 走看看