设计高性能的WCF解决方案MauroOttaviani资深软件开发主管微软公司回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议与下列.NET技术具有可比性.NETRemotingSystem.EnterpriseServicesSystem.Messaging速度比以下网络服务更快ASMX(ASP.NET网络服务)WSE性能优于其它同类技术回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议WCF默认支持多种传输层TCP,HTTP,MSMQ,NamedPipes可以自定义其它传输层每一种传输层各有不同的考虑因素消息传输模式,可接受客户端的多寡,互操作性,开销消息类型==XMLInfoset序列化器是对象图与Infosets之间的桥梁WCF自带了三种序列化器DataContractSerializer(DCS)NetDataContractSerializer(NDCS)XmlSerializer可应互操作性的要求使用相应的序列化器编码器是Infoset与报文格式之间的桥梁WCF自带了三种编码器(.NET框架3.0)文本,MTOM,二进制.NET框架3.5引入了JSON编码器通常应互操作性的要求来决定使用何种编码器二进制编码速度快,但不具备互操作性MTOM用于大量的二进制数据,同时具备互操作性文本编码则可满足大部分互操作性的要求二进制编码显著快于文本编码可同时提供一个可互操作的端点和一个不可互操作的端点MTOM与二进制编码相近消息越大,编码器对性能的影响也越大协议本身的开销与实际吞吐量相比可以忽略不计消息越小,编码器对性能的影响也越小大部分时间耗费在协议本身序列化器与编码器葛子昂软件设计工程师微软中国研发集团回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议Svcutil.exe可以为服务创建一个代理类型该类型实现了IClientChannel实例化该类型需要额外的开销还可以使用ChannelFactoryT应该使用哪一个?Svcutil.exe创建的类型易于使用,但开销较大ChannelFactoryT不易使用,但开销较小经常被误用!销毁不用的代理会达到阈值:可能会导致客户端挂起会耗尽资源:如套接字不要在每次调用时都创建一个新的代理如果信道是有状态的,那么可以重复使用ChannelFactory“IncreasingMiddle-TierClientPerformance”如果进行缓存,那么还要考虑对伸缩性的影响异步,异步,异步!客户端的使用葛子昂软件设计工程师微软中国研发集团回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议服务是异步的不要浪费CPU资源ServiceModel做了一些保守的限制ServiceThrottlingBehavior/MaxConcurrentSessions==10MaxConcurrentCalls==16InstanceContext被设定为PerCall考虑同步的开销绑定指定了闲置超时ReceiveTimeout:可防御客户端不及时关闭连接服务的使用葛子昂软件设计工程师微软中国研发集团回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议大型数据的传输经验法则:当数据量大于1M时考虑使用流只能用于HTTP,TCP和NamedPipe传输层既可传入服务,也可从服务中传出,或双向设定绑定的TransferMode.Streamed在契约中使用System.IO.Stream设定MaxReceivedMessageSize默认设定为64kWindows和WCF会对内容进行缓存即便是流传输的情况下也是如此WCF提供了用Nagle算法来控制缓存的支持ConnectionBufferSize指定本地缓存的大小MaxOutputDelay在本地缓存数据的最长时间AllowOutputBatching在WCF内部启用批处理流传输葛子昂软件设计工程师微软中国研发集团回报传输层,序列化器,及编码器客户端的选项服务端的选项流传输通常的建议不销毁无用的代理每次调用都创建一个新的代理在没有必要的时候启用安全性(Web)NetTcp/NetPipe/WSHttp默认情况下开启使用ServerThrottle的默认设定ServiceThrottlingBehavior/MaxConcurrentSessions==10MaxConcurrentCalls==16契约中使用了流传输,而绑定中却仍然使用缓存必要时采用流传输:内存的使用,较大的负荷负荷较小时采用缓存更快SvcConfigEditor:可方便地显示所有设定SvcTraceViewer:对追踪数据进行诊断性能计数器VisualStudioTeamSuite中的性能工具Netmon:可分析线上的数据及其行为3.1版已开放下载(Xperf)://不要猜想:测量!实际负荷具有很大的影响部署会造成很大的差异其它应用程序争夺资源网络拓朴可能导致延迟安全性(活动目录,x509&CRLs)对主要的用户场景从头至尾进行测量若只对场景的某一部分进行测量,则一定要谨慎传输层NetPipe,NetTcp,BasicHttp,WSHttp代理重用ServiceChannel,重用ChannelFactory.安全性传输层,WS-*+MessageCredentials,完全WS-*编码器文本编码,MTOM,二进制编码,JSON压缩编码,非WCF自带(GZipStream)运行方式自主运行,在IIS内运行在Vista/2008Server下,IIS7内运行时可支持NetTcp/NetPipe限额/阈值在提高限额/阈值的同时,使其保持尽可能地小实例化/并发Singleton/Multiple事务OleTx,WS-AT队列使用批处理答惑解疑APerformanceComparisonofWindowsCommunicationFoundation(WCF)withExistingDistributedCommunicationTechnologies://msdn2.microsoft.com/en-us/library/aa738757.aspxNetmon3.0(Xperf)://感谢您参与此会场!您的意见与建议对我们非常重要。请您填写反馈表。©2007MicrosoftCorporation.Allrightsreserved.Microsoft,Windows,WindowsVistaandotherproductnamesareormayberegisteredtrademarksand/ortrademarksintheU.S.and/orothercountries.TheinformationhereinisforinformationalpurposesonlyandrepresentsthecurrentviewofMicrosoftCorporationasofthedateofthispresentation.BecauseMicrosoftmustrespondtochangingmarketconditions,itshouldnotbeinterpretedtobeacommitmentonthepartofMicrosoft,andMicrosoftcannotguaranteetheaccuracyofanyinformationprovidedafterthedateofthispresentation.MICROSOFTMAKESNOWARRANTIES,EXPRESS,IMPLIEDORSTATUTORY,ASTOTHEINFORMATIONINTHISPRESENTATION.