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 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

posted @ 2013-08-01 21:13  踏浪帅  阅读(1181)  评论(0编辑  收藏  举报