我正在使用perfmon来检查我的服务行为。我所做的是在不同的机器上启动6个客户端应用程序实例,并在120个线程中发送请求到服务器(每个客户端应用程序为20个)。
我已经检查了计数器和最大实例数(我使用PerSession模型并将实例数设置为100)是12,我认为奇怪的是因为我的服务响应时间大约是120秒...我认为增加数量实例将导致WCF创建更多实例,因此响应时间会更快。
知道为什么WCF不会创建更多的服务实例吗?
谢谢Pawel
答案 0 :(得分:1)
默认情况下,WCF服务受到限制 - 这是一种服务行为,您可以轻松调整。
请参阅MSDN docs on ServiceThrottling。
以下是默认值:
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="Int.MaxValue"
maxConcurrentSessions="10" />
通过这些设置,您可以轻松控制可以处理多少会话或并发呼叫,并且可以确保您的服务器不会被(欺诈性)请求所淹没并瘫痪。
答案 1 :(得分:1)
Ufff,最后一次尝试了解那个愚蠢的WCF。
我现在所做的是:
创建启动20个线程的客户端,每个线程在循环中向服务发送请求。服务器上的性能计数器声称始终只创建 2个实例的服务对象。平均请求时间约为40秒(我在代理呼叫之前开始测量并在呼叫返回后结束)。
修改该客户端以启动5个线程并启动该客户端的4个实例(以模拟前一个示例中的20个线程行为)。性能监视器显示始终创建 8个实例的服务对象。平均请求时间为20秒。
有人可以告诉我发生了什么事吗?我认为服务器存在问题,它不想在最后处理更多的请求,但显然它是客户端引起轰动并且不想再次发送更多请求...也许有某种配置选项,限制客户端一次发送多于两个请求...(缓冲区,限制等...)
在每个线程中创建频道工厂。
答案 2 :(得分:0)
您可能需要引用this article并调整WCF配置(特别是maxConnections)以获取所需的连接数。
考虑使用http://www.codeplex.com/WCFLoadTest之类的内容来点击服务。
此外,perfmon只会让你到目前为止。如果要调试WCF服务,应该查看Windows SDK中的SvcTraceViewer和SvcConfigEditor。
答案 3 :(得分:0)
在服务绑定上,您将maxconnections设置为什么?一旦达到限制,呼叫连接将阻止。
默认值是10我认为。