【发布时间】:2014-11-24 10:22:20
【问题描述】:
我有以下代码在代码中设置 WCF 服务:
namespace Serviceman
{
public class Hostman
{
public Uri VServicesTCPAddress = new Uri("net.tcp://localhost:8000/v-services");
public ServiceHost VServicesHost = new ServiceHost(typeof(MyDemoService), new Uri("net.tcp://localhost:8000/v-services"));
public void ConfigureTcpService()
{
NetTcpBinding tcpBinding = new NetTcpBinding();
ServiceMetadataBehavior sMBehavior = new ServiceMetadataBehavior();
VServicesHost.Description.Behaviors.Add(sMBehavior);
VServicesHost.AddServiceEndpoint(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
VServicesHost.AddServiceEndpoint(typeof(IAccountsService), tcpBinding, VServicesTCPAddress);
}
}
}
我已经启动了该服务并且它工作得很好,但是当我连接我的客户端的多个实例时,一段时间后我收到了使用所有可用通道的错误。现在的问题是如何增加连接池限制的默认值甚至删除它?
【问题讨论】:
-
服务的消费者是否在收到响应后立即关闭连接?如果不是,则连接将无法重新使用,直到超时(可能是几分钟)。
-
不,我没有将其编码为关闭,我认为 WCF 会处理这个问题。所以如果我关闭它们,我是否有机会再次遇到错误?
-
我查看 WCF 连接的方式与查看 SQL 连接的方式相同,即尽快关闭它们。请参阅 Enrico Campidoglio 在此 question 中的回答,了解我认为您应该为客户编写代码的方式。顺便说一句,我相信默认的 WCF 最大并发会话数是 100 x 服务器处理器数(假设你使用 IIS,你应该能够通过 IIS 管理器检查这个)。
标签: c# wcf connection-pooling