WCF Service dans la configuration Web Ferme et environnement charge d'équilibrage
-
10-10-2019 - |
Question
Je veux configurer ASP.NET site Web du projet à l'aide de service WCF [NetTcp] (tant en c #) pour le Web ferme (pour le site Web) et NLB équilibrage de charge (pour le service). Je voudrais configurer les options suivantes pour même.
NetTcpBinding.maxConcurrentCalls, NetTcpBinding.ListenBacklog et NetTcpBinding.MaxConnections
Remarque: Pendant seule configuration de la machine quand j'ai changé la valeur de NetTcpBinding.ListenBacklog et NetTcpBinding.MaxConnections dans le projet de service WCF plus que 10, ce qui est la valeur par défaut. Je suis une exception. Quand j'ai changé cette valeur en site web, il fonctionnait très bien. En raison de cela, je devais garder la configuration par défaut. Je ne sais pas pourquoi cela est le cas. Si quelqu'un pourrait expliquer cela, il serait utile.
Après référence donne idée comment configurer dans un environnement donné, mais ne dit pas comment s'y prendre.
Ref: http://msdn.microsoft. com / fr-fr / bibliothèque / ee377061% 28BTS.10% 29.aspx
Mise à jour:
Permettez-moi de simplifier un peu. Disons que je suit la configuration.
- 2 serveurs IIS dans Web Farm.
- 3 serveurs de service WCF (NetTcp) dans NLB
- config par défaut. par exemple unique.
- NetTcpBinding.ListenBacklog: 10
- NetTcpBinding.MaxConnections: 10
- NetTcpBinding.maxConcurrentCalls: 16
Maintenant, ce sera mon paramètre de configuration dans cet environnement. Sera-ce même que ci-dessus ou sera le suivant.
- config proposée. pour seul Webfarm / NLB
- NetTcpBinding.ListenBacklog: 30 (10 * 3)
- NetTcpBinding.MaxConnections: 30 (10 * 3)
- NetTcpBinding.maxConcurrentCalls: 48 (16 * 3)
La solution
Pour l'équilibrage de charge net.tcp sous Windows NLB, vous devriez avoir une leaseTimeout plus courte avec une valeur de 30 secondes étant suggérée dans MSDN . Assurez-vous d'utiliser par les services d'appel. Configurer NLB pour équilibrer le port individuel pour chaque point final (si vous avez plusieurs points de terminaison) plutôt que la plage de ports que cette performance augmente. Assurez-vous que l'affinité est pas cochée.
J'utilise une liaison personnalisée qui m'a bien servi comme indiqué ci-dessous
<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>