WCF响应时间,限制



我的WCF服务配置:

<system.net>
<connectionManagement>
<add address ="*" maxconnection="500"/>
</connectionManagement>
</system.net>
<bindings>
<basicHttpBinding>
<binding name="customBasicHttpBinding" 
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
transferMode="StreamedResponse">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
maxNameTableCharCount="2147483647"/>
<security mode="None"/>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="customWebBinding" maxBufferSize="2147483647" 
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
maxNameTableCharCount="2147483647"/>
<security mode="None">
</security>
</binding>
</webHttpBinding>
</bindings>
<serviceBehaviors>
<behavior name="soapBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<dataContractSerializer maxItemsInObjectGraph="6553600"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceThrottling maxConcurrentCalls="100"
maxConcurrentInstances="100" maxConcurrentSessions="100" />
</behavior>
</serviceBehaviors>
<services>
<service behaviorConfiguration="soapBehavior" name="Service.Service">
<endpoint name="soap" 
address="" 
binding="basicHttpBinding" bindingConfiguration="customBasicHttpBinding"  
contract="ServiceModel.IService"/>
<endpoint 
address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>

正如您所看到的,我设置了节流参数来处理100个并发实例。

出于测试目的,我在界面上创建了一个类似的伪方法

[OperationContract]
string Test(){
return "test response time";
}

当我试图调用这个方法时,一旦响应时间非常糟糕,它就会使用100个并行请求:

现在正在运行100个并行请求
响应时间:045205P、10047P、043304P、086609P、133913P、091409P、134713P、175718P、137414P、180718P,180618P、222622P、264426P、222822P、262626P、268127P、30453P、310731P、347635P、351035P、391039P、394039P,39544P、436844P、434943P、478748P、437144P、482248P、479048P、525052P、481948P、567657P、525253P、571657P、567357P、613761P、570257P、656566P,612361便士、70117便士、653065便士、743674便士、69517便士、786679便士、736974便士、781778便士、829483便士、875988便士、871587便士、824182便士、870187便士、916392便士、912991便士、919492便士、957596便士、965797便士、1008201便士、1045205便士、1052505便士、1048905便士、109521便士、1089709便士、1137714便士、1181118便士、1132413便士、1176418便士、1183918便士、1218222便士、1231723便士、1260526便士、1275128便士,130423便士,1317132便士,1348935便士,1364836便士,1391039便士,1407141P、1432843P、1448945P、1478548P、1491149P、1520652P、1533153P、1562856P、1575558P、160516P、1619262P、1648265P、1661866P、1691169P、1705471P、1733773P、1748375P、1774677P、1792079P、1815782P、1834183P、1858086P、1877388P、190069P,
0个请求失败
平均响应时间:920126

为什么结果如此糟糕,我试图更改AppPool Worker进程计数,但没有成功,有人能告诉我缺少了什么吗,设置限制是什么吗?

我在Windows Server 2008R2计算机上使用WCF 4.0,IIS7.5。

谢谢

如果没有关于服务、配置和环境的详细信息,就很难深入了解通信性能问题。至少,您可以提供服务绑定、ServiceBehaviorAttribute和有关客户端配置的信息。

通过多年的WCF性能测试和优化,我们看到了与您所描述的"类似"的问题……尽管有100个并发连接,但服务似乎没有有效地"响应",即使服务器资源似乎并不繁忙。在我们的案例中,"延迟"与缓慢、"冷"启动以及所花费的时间有关。NET线程池来分配线程。

以下文章讨论了我们的问题:
http://blogs.msdn.com/b/dmetzgar/archive/2011/05/04/wcf-scales-up-slowly-with-bursts-of-work.aspx

祝你好运。

我刚刚完成了一个采用节流的大型工业规模WCF项目,发现节流并不总是能产生你期望的结果。我们在生产级虚拟服务器上设置了WCF web服务,然后创建了一个测试工具,在多线程程序上模拟了1000多个虚拟客户端。一旦我们准备好了,我们使用从1到1000的一系列不同的节流设置一遍又一遍地运行测试,但对结果感到惊讶。

例如,您可能会认为运行最大并发连接数为200的web服务的速度是最大连接数为100的两倍,但这并不是我们在以下设置中发现的:

-最大并发会话

-最大并发呼叫

-最大并发实例

事实上,MaxConcurrentSessions=10和MaxConcurrentSession=1000之间的性能(callsProcessed/sec)差别不大。每秒处理的调用大致相同,只是内存使用情况不同。其他油门设置也是如此。

我们找到的节流最快设置是什么?完全没有设置;基本上,让系统。ServiceModel库处理一切。这是我们经过几天测试后发现的最快速度。

就你的表现而言,我会努力找出瓶颈在哪里。例如,如果您的WCF服务正在使用SQL检索数据,请尝试消除SQL,只返回一个静态数据集,看看您的时间是否显著缩短。如果是这样,那么您可能需要处理数据库方面的问题。如果没有,那么处理SOAP消息可能会出现问题。

最新更新