2010-09-10 14 views
10

Ho un servizio WCF scritto in .net 4 ed esposto su net.tcp. Ogni volta che provo ad impostare la proprietà MaxConnections della configurazione di binding su qualcosa di superiore a 10 I am AddressAlreadyInUseException.Proprietà WCF maxConnections

Perché dovrebbe essere lanciato sull'impostazione MaxConnection?

(se è importante, io sono su Server 2008 R2 Standard con un ariete 4 core della CPU e 4 GB)

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

risposta

16

tuo mex endpoint definisce vincolante che non fa parte del vostro frammento di configurazione.

MaxConnection definisce il pool di connessioni per una determinata porta. Al momento si stanno utilizzando due endpoint che condividono porta singola - endpoint ApiService e Metadata. Prima di modificare le impostazioni nella configurazione di binding, entrambi gli enpoint hanno utilizzato il valore predefinito - 10 connessioni in un pool. Quando hai cambiato il valore ha interessato solo un endpoint, il secondo endpoint richiede ancora 10 connessioni = >. Le soluzioni sono:

  • espongono metadati endpoint su porta diversa.
  • Crea binding personalizzato per l'endpoint Mex. L'impostazione predefinita mexTcpBinding non consente di modificare MaxConnections. Impostare lo stesso valore per MaxConnection in associazione personalizzata.
  • Prova a utilizzare port sharing.

Almeno la prima idea dovrebbe funzionare.

+0

Posso confermare che anche il secondo e il terzo suggerimento funzionano, anche se il secondo è meno lavoro/più elegante, penso. – Jeremy

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

uso vincolante = "netTcpBinding", non mexTcpBinding, così i due estremi può Shahre la stessa configurazione netTcpBinding. Il valore maxConnections può essere lo stesso!

Problemi correlati