当InstancingMode设置成Single时,WCF在宿主内创建一个单一的实 例,不考虑有多少客户端被创建。当ConcurrencyMode设置成Multiple时,WCF为每个请求创建一个线程(取决于系统上限)以实现服务 方法的并行执行。为了减少这个,maxConcurrentCalls行为控制有多少个并发调用可以激活。

列表5.9 显示了一个使用InstanceContextMode.Single和ConcurrencyMode.Multiple的服务行为。服务操作花费20秒完成。

列表5.9 使用InstanceContextMode.Single和ConcurrencyMode.Multiple的行为的服务

01 [ServiceContract]
02 public interface IStockService
03 {
04     [OperationContract]
05     double GetPrice(string ticker);
06 }
07  
08 [ServiceBehavior(InstanceContextMode= InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple)]
09 public class StockService : IStockService
10 {
11     StockService()
12     {
13         Console.WriteLine("{0}:Created new instance of StockService on thread", DateTime.Now);
14     }
15     public double GetPrice(string ticker)
16     {
17         Console.WriteLine("{0}: GetPrice called on thread {1}", DateTime.Now, Thread.CurrentThread.ManagedThreadId);
18         Thread.Sleep(20000);
19         return 94.85;
20     }
21 }

列表5.10 显示了服务的app.config文件。maxConcurrentCalls行为设置成5,意味着在同一时间不可以再激活多于5个调用。

列表5.10 使用maxConcurrentCalls控制并发

01 <?xml version="1.0" encoding="utf-8" ?>
02 <configuration>
03     <system.serviceModel>
04         <bindings />
05         <behaviors>
06             <serviceBehaviors>
07                 <behavior name="throttling">
08                   <serviceThrottling maxConcurrentCalls="5"/>
09                 </behavior>
10             </serviceBehaviors>
11         </behaviors>
12         <services>
13             <service behaviorConfiguration="throttling" name="Services.StockService">
14                 <endpoint address="" binding="basicHttpBinding" contract="Services.IStockService" />
15                 <host>
16                     <baseAddresses>
17                         <add baseAddress="http://localhost:8000/stockservice" />
18                     </baseAddresses>
19                 </host>
20             </service>
21         </services>
22     </system.serviceModel>
23 </configuration>

图片5.7显示了列表5.7中的客户端(左边)和服务端(右边)输出。在客户端,注意当程序启动时10次调用立即开始。在这10次调用中,5个结果 在20秒钟后返回而剩下的5个结果在另外20秒钟后返回。在服务端输出,注意只有一个实例被创建。也要注意5次对GetPrice的调用立刻执行,每个都 在它们自己的线程里执行。当这5个线程结束后,线程被重用同时客户端的顺序请求被处理。

图片5.7 控制并发调用数量的输出结果

========

转载自

作者:DanielWise
出处:http://www.cnblogs.com/danielWise/

转载于:https://www.cnblogs.com/llbofchina/archive/2011/06/30/2094056.html

WCF 第五章 控制并发调用的数量相关推荐

  1. WCF 第五章 并发和实例(服务行为)

    并发是一个多少个任务可以同时执行的度量,以任务(请求,工作,事务,以及类似的)的形式度量.执行时间是一个任务多长时间完成的度量,以时间(毫秒,秒,其他的时间单位等)度量.吞吐量是在一个指定时间里可以完 ...

  2. WCF 第五章 会话级别的实例

    会话在分布式应用程序中广泛用于维护每个用户的状态.在站点或者基于站点的应用中,将每个用户的状态存储于会话中很常见.这这些情况中,用户和会话间有一个1:1比例.WCF以一个类似的概念支持服务.使用Ins ...

  3. WCF 第五章 行为 实现自定义行为

    自定义行为可以在WCF创建运行时和消息处理管道时让你在重要的地方插入代码.行为可以添加到代码中,通过属性或配置文件手动实现服务描述.在所有的情况中,代码可以做一些辅助动作,比如在一个目录中寻找信息或者 ...

  4. Java高级技术第五章——高并发编程之从synchronized关键字到事务并发的若干问题

    前言 前言点击此处查看: http://blog.csdn.net/wang7807564/article/details/79113195 synchronized关键字 通过该关键字的使用,保证可 ...

  5. WCF 第五章 行为 事务之选择一个事务协议-OleTx 或者WS-AT

    事务管理器负责协调多个部分间的工作并通过资源管理器提交工作.资源管理器负责处理可信赖,持续存储.取决于使用的资源和服务或应用跨越的边界,WCF将使用三个事务管理器中的一个来完成事务处理.轻量级事务管理 ...

  6. WCF 第五章 行为 以属性为服务操作行为暴露一个参数检测器

    列表5.24实现一个使用正则表达式验证参数的行为.它可以应用到任何操作上并允许开发人员定义一个正则表达式和当参数不合法时用来返回错误信息的消息. 代码显示了从一个操作行为调用的一个参数检测器并显示了实 ...

  7. WCF 第五章 行为 实现事务(操作行为)

    有两个场景一般用作事务的参考.多步骤商业过程是典型跨度分,天,月的长时间运行过程.它们可以涉及多个组织和基于人的工作流.短期运行事务是那些在几秒钟完成并很少有外部依赖的商业操作.尽管它们都有定义的很好 ...

  8. WCF 第五章 导出并发布元数据(服务行为)

    一个服务的ABCs-它的地址,绑定和契约-是以元数据的形式表示的以便于潜在的客户端知道到哪里,该如何与谁去通信.信息统称为服务元数据.服务行为元数据是大多数程序员遇到的第一个行为,因为当你创建WCF工 ...

  9. 操作系统:第五章 磁盘管理 - I/O控制,缓冲区管理

    本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...

最新文章

  1. 从Qcheck 1.3 不能在不同操作系统上运行问题(chro124、chro342)说开来------
  2. Ms Sql Server 基本管理脚本(1)
  3. 深夜,我偷听到程序员要对session下手……
  4. 四川网络推广浅析新站要如何更快的获得好排名?
  5. PHP Mysql类【转】
  6. 6.set ff=unix;设置Linux中文件中每行后又尖括号的情况
  7. IISASP.NET 站点IP跳转到域名
  8. Could not autowire. No beans of 'xxxx' type found的错误提示
  9. Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)
  10. iphonex价格_正二品:帮你解读IphoneX回收价,为何二手市场iphoneX依旧吃香
  11. linux监控采集项
  12. linux lamp框架,LAMP架构协同应用的实例——phpMyAdmin
  13. Linux系统裁减之,制作一个极度精简的Linux-5-重新编译login去除对pam模块的依赖...
  14. translator什么意思中文_translator是什么意思|translator的音标|translator的用法 - 英语词典...
  15. 夸奖对方代码写的好_形容夸人的成语有哪些
  16. 不同的国际学校课程毕业后可申请什么学校
  17. C语言将一个数插入到已排好序的数组中
  18. jQuery获取元素上一个、下一个、父元素、子元素
  19. 最近 Flutter 争气了! Flutter 也可以做这么炫酷的动画
  20. Unity编写冰球对战游戏 2D版

热门文章

  1. 两台虚拟机ping不通问题
  2. UA MATH567 高维统计II 随机向量5 亚高斯随机向量
  3. UA SIE545 优化理论基础1 凸分析3 凸集与凸包
  4. drop、delete与truncate的区别 和 delete是否记录日志
  5. Win32 树视图控件的基本使用
  6. 编译通过PCL1.5.1的第一个例子图解
  7. 如何生成动态库 .dll 的符号 .lib 文件?
  8. StringUtils 正则校验
  9. java数组之binarySearch查找
  10. java面向对象第六章