Настройка службы WCF в среде веб-фермы и балансировки нагрузки - PullRequest
1 голос
/ 21 октября 2010

Я хочу настроить проект веб-сайта ASP.NET с использованием службы WCF [NetTcp] (оба в c #) для веб-фермы (для веб-сайта) и балансировки нагрузки NLB (для службы).Я хочу настроить следующие параметры для одного и того же.

NetTcpBinding.maxConcurrentCalls, NetTcpBinding.ListenBacklog и NetTcpBinding.MaxConnections

Примечание.Максимальное число подключений в проекте службы WCF превышает 10, что является значением по умолчанию.Я получил исключение.Когда я изменил это значение на сайте, он работал нормально.Из-за этого мне пришлось сохранить настройки по умолчанию.Не уверен, почему это так.Если бы кто-нибудь мог объяснить это, это было бы полезно.

Следующая ссылка дает представление о том, как настроить в данной среде, но не говорит, как это сделать.

Ссылка: http://msdn.microsoft.com/en-us/library/ee377061%28BTS.10%29.aspx

Обновление:

Позвольте мне немного упростить.Допустим, у меня есть следующая конфигурация.

  • 2 сервера IIS в веб-ферме.
  • 3 Серверы службы WCF (NetTcp) в NLB
  • Конфигурация по умолчанию.для одного экземпляра.
    • NetTcpBinding.ListenBacklog: 10
    • NetTcpBinding.MaxConnections: 10
    • NetTcpBinding.maxConcurrentCalls: 16

Что теперьбудет моей настройкой конфигурации в этой среде.Будет ли это так же, как указано выше, или будет следующим.

  • Рекомендуемая конфигурация.для одного WebFarm / NLB
    • NetTcpBinding.ListenBacklog: 30 (10 * 3)
    • NetTcpBinding.MaxConnections: 30 (10 * 3)
    • NetTcpBinding.maxConcurrentCalls: 48 (16* 3)

1 Ответ

0 голосов
/ 21 октября 2010

Для балансировки нагрузки net.tcp с использованием Windows NLB у вас должен быть более короткий leaseTimeout со значением 30 секунд, предлагаемым в MSDN .Убедитесь, что вы используете для каждого звонка услуги.Сконфигурируйте NLB для балансировки отдельных портов для каждой конечной точки (если у вас несколько конечных точек), а не для диапазона портов, поскольку это повышает производительность.Убедитесь, что сходство не проверено.
Я использую пользовательское связывание, которое хорошо мне помогло, как показано ниже

<customBinding>

        <binding name="netTcpBindingConfiguration_custom"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00"
                 receiveTimeout="00:10:00"
                 sendTimeout="00:01:00" >
          <transactionFlow/>
          <windowsStreamSecurity/>
          <binaryMessageEncoding/>

          <tcpTransport maxBufferPoolSize="524288"
                        maxReceivedMessageSize="5000000"
                        connectionBufferSize="8192"
                        manualAddressing="false"
                        hostNameComparisonMode="StrongWildcard"
                        channelInitializationTimeout="00:00:05"
                        maxBufferSize="5000000"
                        maxPendingConnections="20"
                        maxOutputDelay="00:00:00.2000000"
                        maxPendingAccepts="5"
                        transferMode="Buffered"
                        listenBacklog="20"
                        portSharingEnabled="false"
                        teredoEnabled="false">
            <connectionPoolSettings groupName="default"
                                    leaseTimeout="00:00:30"
                                    idleTimeout="00:02:00"
                                    maxOutboundConnectionsPerEndpoint="100"/>
          </tcpTransport>
        </binding>
</customBinding>
...