我有一个用.net 4编写的WCF服务,并通过net.tcp公开。每当我尝试将绑定配置的MaxConnections属性设置为高于10的值时,我就是AddressAlreadyInUseException。
为什么会被MaxConnection设置抛出?
(如果重要的话,我使用的是带有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>
答案 0 :(得分:16)
您的mex端点定义的绑定配置不属于您的配置代码段。
MaxConnection定义给定端口的连接池。目前,您正在使用两个共享单个端口的端点--ApiService和Metadata端点。在更改绑定配置中的设置之前,两个enpoints都使用默认值 - 池中的10个连接。当您更改它仅影响一个端点的值时,第二个端点仍需要10个连接=&gt;例外。解决方案是:
至少第一个想法应该有用。
答案 1 :(得分:1)
<endpoint
address="mex"
binding="netTcpBinding"
bindingConfiguration="NetTcpBinding"
contract="IMetadataExchange" />
使用binding =“netTcpBinding”,而不是mexTcpBinding,因此两个端点可以使用相同的netTcpBinding配置。 maxConnections值可以相同!