2010-09-10 9 views
10

Tengo un servicio WCF escrito en .net 4 y expuesto en net.tcp. Cada vez que intento establecer la propiedad MaxConnections de la configuración de enlace en algo superior a 10, soy AddressAlreadyInUseException.propiedad WCF maxConnections

¿Por qué debería ser arrojado en la configuración MaxConnection?

(si importa, estoy en el servidor 2008 R2 estándar con un núcleo de CPU 4 y 4 GB de RAM)

configuración
<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> 

Respuesta

16

Su punto final mex define vinculante que no es parte de su fragmento de configuración.

MaxConnection define la agrupación de conexiones para un puerto determinado. En este momento está utilizando dos puntos finales que comparten puerto único: ApiService y Metadata endpoints. Antes de que cambie la configuración en su configuración de enlace, ambos puntos utilizan el valor predeterminado: 10 conexiones en un grupo. Cuando cambió el valor, afectó solo a un punto final. El segundo extremo todavía exige 10 conexiones = > excepción. Las soluciones son:

  • Expone el punto final de metadatos en un puerto diferente.
  • Cree un enlace personalizado para el punto final Mex. El valor predeterminado mexTcpBinding no permite cambiar MaxConnections. Establezca el mismo valor para MaxConnection en el enlace personalizado.
  • Intente utilizar port sharing.

Al menos la primera idea debería funcionar.

+0

Puedo confirmar que su segunda y tercera sugerencia también funcionan, aunque la segunda es menos trabajo/más elegante, creo. – Jeremy

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

uso de unión = "netTcpBinding", no mexTcpBinding, por lo que los dos puntos finales puede Shahre la misma configuración netTcpBinding. ¡El valor de maxConnections puede ser el mismo!

Cuestiones relacionadas