未关闭代理时,在400次实例调用后WCF客户端超时

时间:2011-04-01 10:59:58

标签: wcf

我正在使用以下代码来调查未能关闭代理时会发生什么:

class Program
{
    static void Main()
    {
        for (int i = 1; i < 500; i++)
        {
            MakeTheCall(i);
        }

        Console.WriteLine("DONE");
        Console.ReadKey();
    }

    private static void MakeTheCall(int i)
    {
        Console.Write("Call {0} - ", i);

        var proxy = new ServiceReference1.TestServiceClient();

        var result = proxy.LookUpCustomer("123456", new DateTime(1986, 1, 1));

        Console.WriteLine(result.Email);            

        //proxy.Close();
    }
} 

该服务使用net.Tcp绑定,WAS托管,所有默认值。

运行它,当我&gt;我得到超时400.为什么400-这是一个设置吗?我预计它会少得多 - 等于maxConnections。

2 个答案:

答案 0 :(得分:5)

通过不关闭代理,您将维护该服务的会话。 maxConcurrentSessions限制属性控制服务可以容纳的会话数。默认(在.NET 4.0中)是100 * Processor Count,所以我猜你有4个处理器(或核心)= 400个并发会话?

答案 1 :(得分:0)

您的测试代码超时的原因可能是由于默认的WCF服务限制,并且与没有丢弃代理对象没有任何关系。为了节省客户端资源,您应该始终正确地处置代理实例。

我认为服务主机默认情况下最多只能创建16个服务实例,如果绑定设置为使用某种类型的会话,则可能更少。你会在几秒钟内充斥大约400个请求。有一组WCF performance counters可以启动并查看WCF服务的实例化。我知道WCF认证考试的准备工作在某个时候会非常有用:)