Fork me on GitHub
WCF 限流 Throttling


WCF 限流 Throttling

限流不是直接的实例管理技术,他允许开发者限制客户端的连接数已经服务器负荷,使用限流技术以后,一旦超出配置的设置值,WCF就会自动的将等待处理的调用放入队列中,然后再依次从队列中取出,如果客户端等待超时,那么客户端会获得一个TimeoutException异常。每个服务类型都可以使用WCf限流技术。

WCF限流配置参数

并发会话最大数:针对TCP,IPC等能保持传输层连接的会话的服务绑定的独立客户端最大数,也就是能保持会话的客户端的最大连接数。对于Http等无连接的服务是无效的,默认为10

并发调用最大数:指所有服务实例中读取正在执行的调用总数

并发实例最大数:表示存活的并发上下文总数。默认是无限的。

配置限流

      <behaviors>
         <serviceBehaviors>
            <behavior name = "ThrottledBehavior">
               <serviceThrottling  
                  maxConcurrentCalls     ="12"
                  maxConcurrentSessions ="34"
                  maxConcurrentInstances ="2"
               />
            </behavior>
         </serviceBehaviors>
      </behaviors>

在服务端读取限流参数

         ChannelDispatcher dispatcher = OperationContext.Current.Host.ChannelDispatchers[0] as ChannelDispatcher;

         ServiceThrottle serviceThrottle = dispatcher.ServiceThrottle;

         Trace.WriteLine("MaxConcurrentCalls = "+ serviceThrottle.MaxConcurrentCalls);
         Trace.WriteLine("MaxSessions = " + serviceThrottle.MaxConcurrentSessions);
         Trace.WriteLine("MaxInstances = " + serviceThrottle.MaxConcurrentInstances);

编程配置限流

宿主进程可以以编程方式配置限流,但是要在打开宿主之前执行

         ServiceHost host = new ServiceHost(typeof(MyService));
         //Make sure there is no throttle in the config file
         
ServiceThrottlingBehavior throttle = host.Description.Behaviors.Find<ServiceThrottlingBehavior>();
         if(throttle == null)
         {
            throttle = new ServiceThrottlingBehavior();
            throttle.MaxConcurrentCalls     = 12;
            throttle.MaxConcurrentSessions = 34;
            throttle.MaxConcurrentInstances = 2;
            host.Description.Behaviors.Add(throttle);
         }

         host.Open();

绑定中的限流连接

在使用TCP和IPC绑定的时候我们也可以在绑定中为一个特定的终结点配置最大连接数。

          <netTcpBinding>
            <binding name="TCPThrottle" maxConnections="25"></binding>
          </netTcpBinding>

maxConnections的默认值为10,如果绑定限流与服务行为的限流都设置了最大连接值,WCF选择其中较小的一个

 
 

wcf项目实战

最近在crm项目中加入了wcf服务层,以便于制作对外的客户资料查询以及呼叫中心的数据交换,主要内容如下:  1.       Client在引用或者更新wcf的时候需要host中的配置打开mex元数据,实际发布后需要进行关闭 2.       对于.netTcpBinding来说效率相对较快,但是不具备交互性 3.       对于wcf和非wcf进行通信的时候适用传输安全即可,对于netTcpBin...
 阅读(130) 评论(0)
 
 

WCF开发笔记(一)

1.在使用vs2008开始建立wcf项目的时候,会在项目中出现app.config文件,建立的这个wcf library是可以直接通过vs2008集成的工具WcfTestClient.exe进行调试的,但是如果使用到了DataTable等数据类型的话,就不能使用这个工具进行调试了。需要自己写数据契约了。vs2008很方便,但是带给初学者一个误区就是在契约类库里进行配置,由于上面也说了会自动出现app.config文件,这个配置应该在host中进行。这里为什么会有app.config呢?由于需要通过WcfTe...
 阅读(64) 评论(0)
 
 

DataTable in WCF

在客户端与服务器之间交换的服务契约中,最常见的一种数据契约类型是数据库的类型。在WCF中,我们可以定义DataSet和DataTable类型的服务契约。【OperationContract】DataTable ×××();但是我在写程序的时候发现WCF不能传递DataTable类型。解决方法或许有两种:1)为DataTable赋一个TableName2)声明DataSet类型服务契约,将Table添加到DataSet中,然后返回客户端,再引用DataSet中的表。我使用了第二种方法,测试通过。不过看到网上一...
 阅读(358) 评论(0)
 
 

WCF 测试客户端 (WcfTestClient.exe)

Windows Communication Foundation (WCF) 测试客户端 (WcfTestClient.exe) 是一个 GUI 工具,使用该工具,用户可以输入测试参数、将该输入提交给服务并查看服务发回的响应。当与 WCF 服务主机结合时,它可以提供完美的服务测试体验。使用测试客户端的方案以下各节讨论了使用 WCF 测试客户端简化开发流程的最常见方案。Visual Studio 内部WCF 服务主机启动 WCF 测试客户端和一项服务在创建新的 WCF 服务项目并按 F5 启动调试器后,WCF...
 阅读(252) 评论(0)
 
 

几个不错的WCF系列课程

  根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式 应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序...
 阅读(707) 评论(0)
 
 

WCF学习总结(六)

WCF并发模型1.       目的是为服务提供并发控制,通过ConcurrencyMode枚举的Single(默认),Reentrant和Multiple进行设置。2.       ServiceBehaviorAttribute控制这个设置,代码:[ServiceBehavior(ConcurrencyMode =ConcurrencyMode.Single)]public class CounterService:ICounterService3.       Single(1)       当服务实...
 阅读(198) 评论(0)
 
 

WCF学习总结(五)

Wcf消息交换模式1.       请求/回复(Request/Reply)(1)       默认的消息交换模式(2)       图例:2.       单向(One-way)(1)       使用OperationContractAttribute将操作标记为one-way(2)       没有回应(response),不会报告异常(3)       客户端虽然不关心消息响应,但是有些情况下希望保证消息能够确实送达:可靠性消息提供暂时性的可靠性,Microsoft® Message Queuing...
 阅读(63) 评论(0)
 
 

WCF学习总结(四)

WCF宿主1.       Self-Hosting(自托管宿主)(1)       利用WCF提供的ServiceHost提供的Open()和Close()方法,可以便于开发者在控制台应用程序,Windows应用程序乃至于ASP.NET应用程序中托管服务。不管自宿主的环境是何种应用程序,实质上托管服务的方式都是一致的。(2)       在通常的企业应用中,我们很少会采用自宿主方式托管服务,这是因为这种方式必须要在应用程序运行下,客户端才能够调用服务,且并不便于随时启动和停止服务。除了不具有易用性与易管理...
 阅读(58) 评论(0)
 
 

WCF学习总结(三)

基于WCF的客户端和服务端参数传递的过程:主要步骤:客户端序列化参数为XML信息集--传递->服务端反序列化为本地类型--执行结果->序列化结果为XML信息集--传递->客户端序反序列化返回信息为本地类型。什么是序列化:序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序...
 阅读(145) 评论(0)
 
 

WCF绑定方式选择

1. 基于HTTP的绑定BasicHttpBinding、WSHttpBinding、WSDualHttpBinding和WSFederationHttpBinding选项适合于通过XML Web服务协议提供契约类型。显然,如果需要使该服务可适用于更多场合(多种操作系统和多种编程语言),这些就是需要关注的绑定,因为所有这些绑定类型都基于XML表示编码数据并且使用HTTP传送数据。在表25-3中,注意到可以在代码中表示WCF绑定(通过System.ServiceModel名称空间中的类类型),或者作为在*.c...
 阅读(745) 评论(0)
 
 

WCF学习总结(二)

客户端和WCF服务通信的过程:客户端通过代理调用WCF服务,代理通过服务地址找到特定的服务,调用执行特定的服务方法。WCF服务元数据:WCF服务元数据是WCF服务的核心部分服务地址(Address)、绑定(通信协议Binding)、契约(服务、操作、数据Contract)的原始描述信息。服务所公开的元数据包括XSD(文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值)和WSDL文档(用于描述服务的方法、参数、参数个数、顺序、返...
 阅读(89) 评论(0)
 
 

WCF - IsOneWay 和异步的区别

在某些博客文章里,直接将 IsOneWay 称为 "异步方法"。虽然多数时候不会对开发带来什么问题,但深究起来,这两者是不同的。接下来,我们做个试验。将同一个服务契约分别用 IsOneWay 和异步进行实现,客户端使用多线程模拟并发调用,并使用 ServiceThrottlingBehavior (也可以使用 InstanceContextMode.Single) 进行并发控制。注意对比输出结果,我们就会发现其不同之处。IsOneWay版本[ServiceContract]public interface ...
 阅读(24) 评论(0)
 
 

WCF学习总结(一)

概述:Windows Communication Foundation (WCF)是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。SOA体系:将原来的DAL —— BLL —— Client 中加入Servic...
 阅读(67) 评论(0)
 
 

WCF配置文件详解

WCF配置文件详解!...
 阅读(330) 评论(0)
posted on 2012-06-11 15:01  HackerVirus  阅读(337)  评论(0编辑  收藏  举报