2009-12-01 142 views
0

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

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

任何想法为什么WCF不会创建更多的服务实例?

感谢帕维尔

回答

0

您可能要参考this article并进行调整,以您的WCF的配置(特别是MAXCONNECTIONS),以获得您想要连接的数量。

考虑使用诸如http://www.codeplex.com/WCFLoadTest之类的命令来启动服务。

此外,perfmon只会让你到目前为止。如果你想调试WCF服务,你应该看看Windows SDK中的SvcTraceViewer和SvcConfigEditor。

+0

maxConnections属性?我应该在哪里应用它?绑定配置? – dragonfly 2009-12-02 10:22:29

0

在你的服务绑定什么你设置maxconnections?一旦达到限制,呼叫连接将被阻止。

默认为10我想。

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

+0

我使用我的用户定义的绑定。当我是配置属性添加到我的绑定配置的GET例外: 无法识别的属性“MAXCONNECTIONS” – dragonfly 2009-12-02 10:05:39

+0

我使用HTTP传输 – dragonfly 2009-12-02 10:07:48

+0

啊,OK basicHttpBinding的是无连接的,以便好好尝试一下具有attr属性。 您是否尝试过上面提到的遏制marc_s? – MattC 2009-12-02 11:28:17

1

WCF服务默认情况下,节流 - 这是一个服务行为,它可以轻松地调整。

查看MSDN docs on ServiceThrottling

下面是默认设置:

<serviceThrottling 
    maxConcurrentCalls="16" 
    maxConcurrentInstances="Int.MaxValue" 
    maxConcurrentSessions="10" /> 

通过这些设置,就可以轻松控制多少会话或并发呼叫可以被处理,你可以确保你的服务器不会被(欺诈)的请求淹没并跪下。

1

Ufff,最后一次尝试去理解那个愚蠢的WCF。

我现在所做的是:

  • 创建客户端,启动20个线程,每个线程将在循环中的服务请求。服务器上的性能计数器声称只有服务对象的2个实例始终创建。平均请求时间约为40秒(我在代理呼叫之前开始测量,在呼叫返回后结束)。

  • 修改该客户端以启动5个线程并启动该客户端的4个实例(以模拟前面示例中的20个线程行为)。性能监视器显示服务对象的8个实例始终创建。平均请求时间为20秒。

有人能告诉我发生了什么事吗?我认为服务器存在一个问题,即它不想处理更多的请求,但显然这是客户端引起的骚动,不希望发送更多的请求,也许会有某种配置选项,限制客户端同时发送多个两个请求...(缓冲区,节流等...)

通道工厂是在每个线程中创建的。