繁体   English   中英

模拟并发的WCF客户端呼叫并测量响应时间

[英]Simulate Concurrent WCF Client Calls And Measure Response Time

我正在尝试模拟WCF服务的并发请求数X,并测量每个请求的响应时间。 我希望所有请求或多或少地同时到达服务。

第一步,我使用Thread类产生了X个线程,并调用了Start方法。 为了同步所有请求,在Thread回调上,我打开连接并使用Monitor.Wait阻止请求被激发,直到创建并启动所有Thread。 启动所有线程后,我将调用Monitor.PulseAll来触发WCF客户端代理上的方法调用。

当我以这种方式执行请求时,我看到响应中的巨大延迟。 一个仅几毫秒的请求大约需要一秒钟。

我还注意到在调度请求的时间和在服务方法处接收到时间之间存在巨大的滞后。 我通过将发送客户端时间戳作为参数值发送给每个请求的服务方法来进行测量。

我有以下设置。 假定“ X”为我要触发的并发请求数。 还要注意以下设置,我不会遇到任何拒绝服务问题。

  1. 调用链如下:Client-> Service1-> Service2-> Service3
  2. 所有服务都是PerCall,并发性设置为Multiple。
  3. 将节流设置为X个并发调用,X个并发实例。
  4. MaxConnections,在Service X上侦听Backlog。
  5. 在客户端和服务器上,ThreadPool的最小/最大线程数都设置为X(我已经应用了Microsoft提供的补丁程序)。

不知道我正在测量的响应时间是否准确。 我缺少一些琐碎的东西吗?

任何对此的投入将有很大帮助。

谢谢。

-Krishnan

我确实很难找到答案。 在所有这些期间,我测量响应时间的方式是错误的。 一个应该产生X个线程,其中X是一个用户想要模拟的并发用户数。 在每个线程中,仅打开一次连接,并执行while循环以仅在给定的时间内执行要测试的WCF方法。 测量每次返回的响应时间,进行累加,并根据给定持续时间内执行的呼叫次数求平均。

如果所有传出呼叫均来自单个进程,则运行时可能会将多个请求合并到单个开放通道上,或者将并发请求的数量限制为单个目标服务。 您可能有更好的结果,如果你移动的每个模拟客户端成自己的过程中,使用命名EventWaitHandle同步它们,并调用#Set()来一次释放他们。

Windows桌面版本所允许的同时进行的未决(TCP SYN或SYN / ACK状态)传出TCP连接的数量也有限制。 如果遇到此限制,则将记录事件4226 ,并且其他同时连接将被推迟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM