Eu tenho um aplicativo ASP.NET 4.0 em execução no IIS 7.5 em uma máquina Windows Server 2008 R2 Enterprise de 64 bits com montes de RAM, CPU, disco, etc.
Com cada solicitação da Web, o aplicativo ASP.NET faz uma conexão com um serviço da Web de back-end (por meio de soquetes brutos), que está sendo executado na mesma máquina.
Problema: parece haver algo limitando o número de conexões simultâneas ao serviço da web de back-end. Suspeito, o número de conexões simultâneas está chegando a 16.
Encontrei este artigo importante da Microsoft explicando como ajustar as configurações do IIS para acomodar aplicativos ASP.NET que fazem muitas solicitações de serviço da Web: http://support.microsoft.com/?id=821268#tocHeadRef
Segui as recomendações do artigo, mas ainda sem sorte. A configuração que é particularmente interessante é a maxconnection
configuração, que até aumentei para 999.
Alguma ideia do que mais poderia ser conexões de estrangulamento?
Observação: quando eu excluo o IIS da mistura e faço com que os clientes se conectem diretamente ao serviço da web de back-end, ele felizmente abrirá quantas conexões forem necessárias, portanto, tenho certeza de que o back-end não é o gargalo. Deve ser algo na área do IIS / ASP.NET.
Esta é a seção relevante do machine.config
que tenho certeza que está sendo lida pelo aplicativo (verificado com 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>