2010-09-10 14 views
10

Mam usługi WCF napisane w .net 4 i narażone na net.tcp. Za każdym razem, gdy próbuję ustawić właściwość MaxConnections konfiguracji wiążącej na wartość wyższą niż 10, jestem AddressAlreadyInUseException.Właściwość WCF maxConnections

Dlaczego to by było rzucone na ustawienie MaxConnection?

(jeśli ma to znaczenie, jestem na Server 2008 R2 Standard z 4 rdzeń procesora i 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> 

Odpowiedz

16

Twój punkt końcowy mex definiuje wiążącą konfiguracji, która nie jest częścią fragmentu konfiguracji.

MaxConnection definiuje łączenie połączeń dla danego portu. W tej chwili używasz dwóch punktów końcowych, które współużytkują pojedynczy port - punkty końcowe ApiService i Metadata. Przed zmianą ustawień w konfiguracji bindowania obie encje używały wartości domyślnej - 10 połączeń w puli. Po zmianie wartości, której dotyczył, tylko jeden punkt końcowy drugiego punktu końcowego nadal wymaga wyjątku 10 połączeń = >. Rozwiązania są następujące:

  • Ujawnij punkt końcowy metadanych na innym porcie.
  • Utwórz niestandardowe powiązanie dla punktu końcowego Mex. Domyślnie mexTcpBinding nie pozwala na zmianę MaxConnections. Ustaw tę samą wartość dla MaxConnection w powiązaniu niestandardowym.
  • Spróbuj użyć port sharing.

Przynajmniej pierwszy pomysł powinien zadziałać.

+0

Mogę potwierdzić, że twoje drugie i trzecie sugestie również działają, chociaż drugi to mniej pracy/bardziej elegancki, jak sądzę. – Jeremy

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

użycie wiąże = "netTcpBinding" nie mexTcpBinding, więc oba punkty końcowe mogą Shahre samą konfigurację netTcpBinding. Wartość maxConnections może być taka sama!

Powiązane problemy