2010-09-10 54 views
10

我有一個WCF服務寫在.net 4,並通過net.tcp暴露。任何時候我嘗試將綁定配置的MaxConnections屬性設置爲高於10的東西時,我都是AddressAlreadyInUseException。WCF maxConnections屬性

爲什麼會出現MaxConnection設置?

(如果它很重要,我是服務器2008 R2標準版採用了4核CPU和4 GB的RAM上)

<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> 

回答

16

你MEX終結定義綁定配置,它不是你的配置片段中的一部分。

MaxConnection定義給定端口的連接池。目前您正在使用共享單個端口的兩個端點 - ApiService和Metadata端點。在更改綁定配置中的設置之前,兩個參數都使用默認值 - 池中有10個連接。當你改變了它的影響值時,只有一個端點的第二個端點仍然要求10個連接= >例外。解決方案如下:

  • 在不同的端口上公開元數據端點。
  • 爲Mex端點創建自定義綁定。默認mexTcpBinding不允許更改MaxConnections。在自定義綁定中爲MaxConnection設置相同的值。
  • 嘗試使用port sharing

至少第一個想法應該工作。

+0

我可以確認你的第二和第三個建議也可以工作,儘管第二個是我認爲更少的工作/更優雅。 – Jeremy 2011-02-12 03:57:53

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

使用結合= 「NetTcpBinding的」,而不是mexTcpBinding,所以兩個端點可以shahre相同NetTcpBinding的配置。 maxConnections值可以相同!