WCF中的服务实例

时间:2009-12-01 13:56:54

标签: wcf

我正在使用perfmon来检查我的服务行为。我所做的是在不同的机器上启动6个客户端应用程序实例,并在120个线程中发送请求到服务器(每个客户端应用程序为20个)。

我已经检查了计数器和最大实例数(我使用PerSession模型并将实例数设置为100)是12,我认为奇怪的是因为我的服务响应时间大约是120秒...我认为增加数量实例将导致WCF创建更多实例,因此响应时间会更快。

知道为什么WCF不会创建更多的服务实例吗?

谢谢Pawel

4 个答案:

答案 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我认为。

http://msdn.microsoft.com/en-us/library/ms731379.aspx