WCF错误 - 系统达到了限制设置的限制'MaxConcurrentSessions'

时间:2011-01-20 17:31:32

标签: wcf timeout asp.net-2.0

我有一个调用WCF服务的asp.net应用程序。我一直在间歇性超时一段时间,所以我决定创建一个跟踪日志。在超时后,我在日志文件中找到了以下消息:

  

系统达到了设定的限制   节流'MaxConcurrentSessions'。   此油门的限制设置为10。   节气门值可以改变   修改属性   'maxConcurrentSessions'中   serviceThrottle元素或by   修改'MaxConcurrentSessions'   行为上的财产   ServiceThrottlingBehavior。

问题是我每次关闭客户端连接所以我不明白为什么并发会话加起来。以下是我的典型电话:

    try
    {
        //create proxy
        client = new CAEServiceContractClient();

        response = client.GetSecurityRecords(item); 
        totalRecords = response.TotalRecords;

        securityListView.DataSource = response.SecurityItemColl; 
        securityListView.DataBind();

        // Always close the client.
        client.Close();
        success = true;
    }
    finally
    {
        if (!success)
        {
            client.Abort();
        }
    }

所以我的问题是,为什么在执行client.Close()后会话被破坏?

TIA。

1 个答案:

答案 0 :(得分:1)

我没有在上面的代码中看到success声明为局部变量,也没有看到你将它设置为false。可能是第一次成功通话时被设置为true然后保持这种状态的班级成员吗?

在任何情况下,整个代码块都可以重写,以便更容易理解(并且更不容易出错),如下所示:

using (var client = new CAEServiceContractClient())
{
    response = client.GetSecurityRecords(item); 
    totalRecords = response.TotalRecords;

    securityListView.DataSource = response.SecurityItemColl; 
    securityListView.DataBind();
}

using语句确保当using块已完成时(异常正常或异常),client变量将被释放(.Dispose()将被调用),从而关闭连接。

编辑:正如Ladislav Mrnka指出的那样,.Dispose() ClientBase方法有一种习惯,即在某些情况下会抛出异常。请务必按照here所述,在部分.Dispose()课程中实施CAEServiceContractClient方法。