WCF maxConnections свойство - PullRequest
       0

WCF maxConnections свойство

10 голосов
/ 11 сентября 2010

У меня есть служба WCF, написанная на .net 4 и доступная через net.tcp.Каждый раз, когда я пытаюсь установить для свойства MaxConnections конфигурации привязки значение, превышающее 10, я получаю AddressAlreadyInUseException.

Почему это может быть вызвано параметром MaxConnection?

(если это имеет значение,Я использую Server 2008 R2 Standard с 4-ядерным процессором и 4 ГБ ОЗУ)

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

Ответы [ 2 ]

16 голосов
/ 11 сентября 2010

Ваша конечная точка mex определяет конфигурацию привязки, которая не является частью вашего фрагмента конфигурации.

MaxConnection определяет пул соединений для данного порта. В данный момент вы используете две конечные точки, которые совместно используют один порт - ApiService и метаданные. Перед тем, как вы измените настройку в конфигурации привязки, обе точки используют значение по умолчанию - 10 подключений в пуле. Когда вы изменили значение, это затронуло только одну конечную точку, вторая конечная точка все еще требует 10 соединений => исключение. Решения:

  • Предоставить конечную точку метаданных на другом порту.
  • Создание пользовательской привязки для конечной точки Mex. По умолчанию mexTcpBinding не позволяет изменять MaxConnections. Установите то же значение для MaxConnection в пользовательской привязке.
  • Попробуйте использовать общий доступ к порту .

По крайней мере, первая идея должна работать.

1 голос
/ 02 декабря 2013
<endpoint
        address="mex"
        binding="netTcpBinding" 
        bindingConfiguration="NetTcpBinding"
        contract="IMetadataExchange" />

use binding = "netTcpBinding", а не mexTcpBinding, поэтому две конечные точки могут иметь одинаковую конфигурацию netTcpBinding.Значение maxConnections может быть одинаковым!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...