我正在使用以下代码来调查未能关闭代理时会发生什么:
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。
答案 0 :(得分:5)
通过不关闭代理,您将维护该服务的会话。 maxConcurrentSessions限制属性控制服务可以容纳的会话数。默认(在.NET 4.0中)是100 * Processor Count,所以我猜你有4个处理器(或核心)= 400个并发会话?
答案 1 :(得分:0)
您的测试代码超时的原因可能是由于默认的WCF服务限制,并且与没有丢弃代理对象没有任何关系。为了节省客户端资源,您应该始终正确地处置代理实例。
我认为服务主机默认情况下最多只能创建16个服务实例,如果绑定设置为使用某种类型的会话,则可能更少。你会在几秒钟内充斥大约400个请求。有一组WCF performance counters可以启动并查看WCF服务的实例化。我知道WCF认证考试的准备工作在某个时候会非常有用:)