代码改变世界

WCF 第五章 控制并发实例的数量

  DanielWise  阅读(2039)  评论(1编辑  收藏  举报

默认情况下,WCF 宿主将会启动尽可能多的实例来处理请求消息。如果一个服务的实例和并发行为并没有确定,WCF将会为每个进入的请求创建一个服务实例同时将按照需要分配线程来反应请求。总体来说这是一个对性能和扩展性都很好的解决方案因为服务将会最大化扩展硬件性能。

  但是有很多情况你可能想舍弃使用这种行为。为了这个目的,有三种在并发和实例上的设置可以实现。这些定义在配置文件的行为组分的serviceThrottling元素里。

  maxConcurrentInstances行为控制有多少个服务实例可以被一个服务创建。这个设置是有用的如果ConcurrencyMode是PerCall或者PerSession,因为这两个设置都可以指导WCF按照要求创建实例。通过定义WCF可以创建的实例的最大数目,你设置的实例数目的上限将会存储在内存中。当限制达到时,不会有更多的实例被创建除非其他实例被回收或重用。

  列表5.6显示了一个没有确定ConcurrencyMode和InstancingMode的服务,这意味着将会使用默认值Single和PerSession.服务操作花费20秒完成。

列表5.6 使用默认并发和实例行为的服务

  列表5.7 显示了一个异步调用服务端10次的客户端

列表5.8 显示了服务端的app.config文件。maxConcurrentInstances行为被设置成5,指示在服务端不会创建多于5个实例。

列表5.8 使用maxConcurrentInstances限制并发数量

  图片5.6显示了客户端(左边)输出和服务端(右边)输出。在客户端,注意当程序启动时10次调用是如何立即执行的,然后5个结果在20秒钟后返回而另外5个结果在另外20秒钟后返回。在服务端输出,注意前5个实例是如何在客户端请求到来时立即创建的,但是另外5个实例没有创建直到前5个实例关闭了以后。

图片5.6 控制并发实例的输出

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示