J'ai une application ASP.NET 4.0 fonctionnant sous IIS 7.5 sur une machine Windows Server 2008 R2 Enterprise 64 bits avec beaucoup de RAM, de CPU, de disque, etc.
À chaque demande Web, l'application ASP.NET établit une connexion avec un service Web dorsal (via des sockets bruts), qui fonctionne sur la même machine.
Problème : Il semble que quelque chose limite le nombre de connexions simultanées au service web dorsal. De façon suspecte, le nombre de connexions simultanées plafonne à 16.
J'ai trouvé cet article clé de Microsoft expliquant comment modifier les paramètres d'IIS afin d'accommoder les applications ASP.NET qui font beaucoup de demandes de services Web : http://support.microsoft.com/?id=821268#tocHeadRef
J'ai suivi les recommandations de l'article, mais toujours pas de chance. Le paramètre qui est particulièrement intéressant est le maxconnection
que j'ai même fait passer à 999.
Une idée de ce que sinon pourrait restreindre les connexions ?
Note : Lorsque j'élimine IIS du mélange et que les clients se connectent directement au service web dorsal, celui-ci ouvre volontiers autant de connexions que nécessaire, ce qui me permet d'affirmer que le backend n'est pas le goulot d'étranglement. Cela doit être quelque chose dans IIS/ASP.NET-land.
Voici la section pertinente de la machine.config
qui, j'en suis sûr, est lu par l'application (vérifié avec appcmd.exe
):
<system.web>
<processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" />
<httpRuntime minFreeThreads="176" minLocalRequestFreeThreads="152"/>
<httpHandlers />
<membership>
<providers>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/"
type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</profile>
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add name="AspNetWindowsTokenRoleProvider" applicationName="/"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
</system.web>
<system.net>
<connectionManagement>
<add address="*" maxconnection="999"/>
</connectionManagement>
</system.net>