Конфигурация сервиса WCF в веб -ферме и балансировка нагрузки
-
10-10-2019 - |
Вопрос
Я хочу настроить проект веб-сайта 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>