设计高性能的WCF解决方案.pptx
设计高性能的WCF解决方案MauroOttaviani资深软件开发主管微软公司
日程回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议
与下列.NET技术具有可比性01.NETRemoting02System.EnterpriseServices03System.Messaging04速度比以下网络服务更快05ASMX(ASP.NET网络服务)06WSE07性能优于其它同类技术08一些比较
.NETRemotingvsWCF
EnterpriseServicesvsWCF
ASMXvsWCF
WSEvsWCF
通常的建议06流传输05服务端的选项04客户端的选项03传输层,序列化器,及编码器02回报01日程
12543WCF默认支持多种传输层TCP,HTTP,MSMQ,NamedPipes可以自定义其它传输层每一种传输层各有不同的考虑因素消息传输模式,可接受客户端的多寡,互操作性,开销12345传输层基础
传输层的比较
消息类型==XMLInfoset1序列化器是对象图与Infosets之间的桥梁2WCF自带了三种序列化器3DataContractSerializer(DCS)4NetDataContractSerializer(NDCS)5XmlSerializer6可应互操作性的要求使用相应的序列化器7序列化器基础
编码器是Infoset与报文格式之间的桥梁01WCF自带了三种编码器(.NET框架3.0)02文本,MTOM,二进制03.NET框架3.5引入了JSON编码器04通常应互操作性的要求来决定使用何种编码器05二进制编码速度快,但不具备互操作性06MTOM用于大量的二进制数据,同时具备互操作性07文本编码则可满足大部分互操作性的要求08编码器基础
二进制编码显著快于文本编码可同时提供一个可互操作的端点和一个不可互操作的端点MTOM与二进制编码相近消息越大,编码器对性能的影响也越大协议本身的开销与实际吞吐量相比可以忽略不计消息越小,编码器对性能的影响也越小大部分时间耗费在协议本身编码器总结
吞吐量(已规格化)
演示序列化器与编码器葛子昂软件设计工程师微软中国研发集团
回报1传输层,序列化器,及编码器2客户端的选项3服务端的选项4流传输5通常的建议6日程
Svcutil.exe可以为服务创建一个代理类型01该类型实现了IClientChannel02实例化该类型需要额外的开销03还可以使用ChannelFactoryT04应该使用哪一个?05Svcutil.exe创建的类型易于使用,但开销较大06ChannelFactoryT不易使用,但开销较小07经常被误用!08WCF客户端/代理的基础
客户端/代理总结销毁不用的代理会达到阈值:可能会导致客户端挂起会耗尽资源:如套接字不要在每次调用时都创建一个新的代理如果信道是有状态的,那么可以重复使用ChannelFactory“IncreasingMiddle-TierClientPerformance”
如果进行缓存,那么还要考虑对伸缩性的影响异步,异步,异步!
代理的吞吐量
客户端的使用演示葛子昂软件设计工程师微软中国研发集团
代码:在代理内进行缓存
01回报02传输层,序列化器,及编码器03客户端的选项04服务端的选项05流传输06通常的建议日程
01服务是异步的02不要浪费CPU资源03ServiceModel做了一些保守的限制04ServiceThrottlingBehavior/05MaxConcurrentSessions==1006MaxConcurrentCalls==1607InstanceContext被设定为PerCall08考虑同步的开销09绑定指定了闲置超时10ReceiveTimeout:可防御客户端不及时关闭连接服务基础
演示服务的使用葛子昂软件设计工程师微软中国研发集团
01回报02传输层,序列化器,及编码器03客户端的选项04服务端的选项05流传输06通常的建议日程
大型数据的传输经验法则:当数据量大于1M时考虑使用流只能用于HTTP,TCP和NamedPipe传输层既可传入服务,也可从服务中传出,或双向设定绑定的TransferMode.Streamed在契约中使用设定MaxReceivedMessageSize默认设定为64k流传输的基础
Windows和WCF会对内容进行缓存即便是流传输的情况下也是如此WCF提供了用Nagle算法来控制缓存的支持ConnectionBufferSize指定本地缓存的大小MaxOutputDelay在本地缓存数据的最长时间AllowOutputBatching在WCF内部启用批处理流传输的调控
演示LOGO流传输葛子昂软件设计工程