Конфигурация сервиса WCF в веб -ферме и балансировка нагрузки

StackOverflow https://stackoverflow.com/questions/3986475

Вопрос

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

Nettcpbinding.maxconcurrentcalls, nettcpbinding.listenbacklog и nettcpbinding.maxconnections

ПРИМЕЧАНИЕ. Во время конфигурации на одной машине, когда я изменил значение nettcpbinding.listenbacklog и nettcpbinding.maxconnections in service project WCF до более 10, что является значением по умолчанию. Я получил исключение. Когда я изменил это значение на веб -сайте, он работал нормально. Из -за этого я должен был сохранить в конфигурации по умолчанию. Не уверен, почему это так. Если бы кто -то мог бы объяснить это, это было бы полезно.

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

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

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

  • Предлагаемый конфигурация. Для единого веб -фарм/NLB
    • Nettcpbinding.listenbacklog: 30 (10*3)
    • Nettcpbinding.maxconnections: 30 (10*3)
    • Nettcpbinding.maxconcurrentcalls: 48 (16*3)
Это было полезно?

Решение

Для балансировки нагрузки net.tcp с использованием Windows NLB вы должны иметь более короткий лизинник со значением 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top