【问题标题】:How to increase or disable WCF pooling limit?如何增加或禁用 WCF 池限制?
【发布时间】: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


【解决方案1】:

像这样在 TCP 绑定上启用端口共享,

tcpBinding.PortSharingEnabled = true;

或者,

TCP binding configuration 上可用的maxConnections 更改为您选择的内容。Max 连接的默认值是开箱即用的 10。

【讨论】:

  • 那么,“maxConnections”是所有连接到服务的客户端的一般限制,还是每个客户端都有自己的连接数?我的意思是,例如,如果我将其设置为 100,这是所有人的限制,还是每个客户都获得 100?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2021-05-06
相关资源
最近更新 更多