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 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述