Tengo una aplicación ASP.NET 4.0 que se ejecuta sobre IIS 7.5 en una máquina Windows Server 2008 R2 Enterprise de 64 bits con mucha RAM, CPU, disco, etc.
Con cada solicitud web, la aplicación ASP.NET establece una conexión a un servicio web backend (a través de sockets sin procesar), que se ejecuta en la misma máquina.
Problema: parece haber algo que limita el número de conexiones simultáneas al servicio web de backend. Sospechosamente, la cantidad de conexiones simultáneas llega a 16.
Encontré este artículo clave de Microsoft que explica cómo modificar la configuración de IIS para adaptarse a las aplicaciones ASP.NET que realizan muchas solicitudes de servicios web: http://support.microsoft.com/?id=821268#tocHeadRef
Seguí las recomendaciones del artículo, pero aún no tuve suerte. El escenario que es particularmente interesante es el maxconnection
escenario, que incluso salté a 999.
¿Alguna idea de qué más podría estrangular las conexiones?
Nota: Cuando elimino IIS de la mezcla y hago que los clientes se conecten directamente al servicio web de backend, felizmente abrirá tantas conexiones como necesite, así que estoy seguro de que el backend no es el cuello de botella. Debe ser algo en IIS / ASP.NET-land.
Aquí está la sección relevante de la machine.config
que estoy seguro que está siendo leída por la aplicación (verificada con 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>