【问题标题】:WCF Async working too longWCF 异步工作时间过长
【发布时间】:2012-12-06 14:19:10
【问题描述】:

我有 wcf 服务和一些调试方法:

public Result DebugMethod(TimeSpan time){
    Thread.Sleep(time);
    return new Result { Code = new Random().Next()};
}

我想测试同步和异步调用之间的性能。

我将 Result 打包到 Response 类中,其中有互斥锁等待结果:

class Response {
    public Result result;
    bool loaded = false;
    public ManualResetEvent _wait = new ManualResetEvent(false);
    public Result get(){
        if(!loaded){
            _wait.WaitOne();
            loaded = true;
        }
        return result;
    }

还有我的 DebugMethodCompleted 事件:

     //r - correct response structure, result - wcf response
     r.result = result
     r._wait.Set();

我调用 DebugMethodAsync 10 次,每次 TimeSpan = 1 秒。 然后,在所有异步调用之后,我正在检查结果(只是为了等待它们)。

所以我认为大约需要 1 秒。 但总是需要 5 秒。

如果我将调用次数更改为 n,则需要 n/2 秒才能获得所有响应,就像有时可能只是异步任务处理一样。

编辑: 似乎客户端应用程序中的所有异步调用都已进行,但服务器最多同时处理 2 个(来自一个客户端)。

所以: 客户端进行了 4 次异步调用并正在等待结果,服务器正在处理前两个,然后在 1 秒之后,第三个和第四个。

【问题讨论】:

    标签: wcf performance asynchronous


    【解决方案1】:

    您是否检查过 WCF 限制和限制?它可能设置为 2。客户端操作系统的硬编码限制为最大值。 10 个您无法配置的。

    【讨论】:

    • 所以我可以同时在不同的应用程序上运行它,但是在一个应用程序中,最大值是 2?
    • 这是服务器端限制。这意味着客户端无关紧要。您需要更改服务器上的设置。但是,如果您的服务器有客户端操作系统,则不能超过 10。这通常是开发盒的情况。
    • 谢谢,我明天试试,到时候给反馈。
    • 我将 ServiceThrottling 部分添加到我的服务行为中,并将所有三个参数设置为 10,但似乎没有任何变化。不过,当我进行 4 次异步调用时,它需要 2 秒,而不是 1 秒。
    • 已解决。除服务节流外,还应在客户端设置 System.Net.ServicePointManager.DefaultConnectionLimit。详情如下。
    【解决方案2】:

    需要做的事情很少。

    首先,应在服务器服务行为上设置 ServiceThrottling。 可以对服务进行多个并发调用。

    <behavior ...>
        ...
        <serviceThrottling
            maxConcurrentCalls="A"
            maxConcurrentSessions="B"
            maxConcurrentInstances="C"
        />
    </behavior>
    

    接下来,在 clinet 应用程序上,应设置 System.Net.ServicePointManager.DefaultConnectionLimit。默认值为 2。

    // somewhere in the code
    System.Net.ServicePointManager.DefaultConnectionLimit = X;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 2013-01-04
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多