简体   繁体   English

WCF maxConnections属性

[英]WCF maxConnections property

I have a WCF service written in .net 4, and exposed over net.tcp. 我有一个用.net 4编写的WCF服务,并通过net.tcp公开。 Any time I try to set the MaxConnections property of the binding configuration to something higher than 10 I am AddressAlreadyInUseException. 每当我尝试将绑定配置的MaxConnections属性设置为高于10的值时,我就是AddressAlreadyInUseException。

Why would that be getting thrown on the MaxConnection setting? 为什么会被抛到MaxConnection设置?

(if it matters, I am on Server 2008 R2 Standard with a 4 core CPU and 4 gb ram) (如果重要的话,我使用的是带有4核CPU和4 GB RAM的Server 2008 R2 Standard)

    <binding name="NetTcpBinding" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          transferMode="Buffered" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxBufferSize="25000000"
          maxReceivedMessageSize="25000000" maxConnections="50">
          <readerQuotas maxDepth="32" maxStringContentLength="25000000"
            maxArrayLength="25000000" maxBytesPerRead="25000000" maxNameTableCharCount="25000000" />
          <security mode="None" />
    </binding>

    <service behaviorConfiguration="ApiService.ServiceBehavior" name="Api.Service.PlatformApiService">
      <endpoint
        address="/Search"
        binding="netTcpBinding"
        bindingConfiguration="NetTcpBinding"
        contract="IApiService" />        
      <endpoint
        address="mex"
        binding="mexTcpBinding"
        bindingConfiguration="NetTcpBinding"
        contract="IMetadataExchange" />

      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:8094/Api/" />
        </baseAddresses>
      </host>
    </service>

Your mex endpoint defines binding configuration which is not part of your configuration snippet. 您的mex端点定义的绑定配置不属于您的配置代码段。

MaxConnection defines pooling of connections for given port. MaxConnection定义给定端口的连接池。 At the moment you are using two endpoints which share single port - ApiService and Metadata endpoints. 目前,您正在使用两个共享单个端口的端点--ApiService和Metadata端点。 Before you changes setting in your binding configuration both enpoints used default value - 10 connections in a pool. 在更改绑定配置中的设置之前,两个enpoints都使用默认值 - 池中的10个连接。 When you changed the value it affected only one endpoint second endpoint still demands 10 connections => exception. 当您更改它只影响一个端点的值时,第二个端点仍然需要10个连接=>异常。 The solutions are: 解决方案是:

  • Expose metadata endpoint on different port. 在不同的端口上公开元数据端点。
  • Create custom binding for Mex endpoint. 为Mex端点创建自定义绑定。 Default mexTcpBinding does not allow changing MaxConnections. 默认的mexTcpBinding不允许更改MaxConnections。 Set same value for MaxConnection in custom binding. 在自定义绑定中为MaxConnection设置相同的值。
  • Try to use port sharing . 尝试使用端口共享

At least first idea should work. 至少第一个想法应该有效。

<endpoint
        address="mex"
        binding="netTcpBinding" 
        bindingConfiguration="NetTcpBinding"
        contract="IMetadataExchange" />

use binding="netTcpBinding", not mexTcpBinding, so the two endpoints can shahre the same netTcpBinding configuration. 使用binding =“netTcpBinding”,而不是mexTcpBinding,因此两个端点可以使用相同的netTcpBinding配置。 The maxConnections value can be the same! maxConnections值可以相同!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM