我有一个 ASP.NET 4.0应用程序运行在 IIS 7.5之上,在一台64位 Windows Server 2008 R2的企业级机器上,这台机器有大量的内存、 CPU、磁盘等。
对于每个 Web 请求,ASP.NET 应用程序都会连接到一个后端 Web 服务(通过原始套接字) ,该服务在同一台机器上运行。
问题: 似乎有什么东西限制了 # 到后端 Web 服务的同时连接。令人怀疑的是,并发连接的数量已经超过了16个。
我从微软找到了这篇关键文章,解释了如何调整 IIS 的设置,以适应发出大量 Web 服务请求的 ASP.NET 应用程序: http://support.microsoft.com/?id=821268#tocHeadRef
我按照那篇文章的建议做了,但还是没有收获。特别有趣的设置是 maxconnection
设置,我甚至把它调到了999。
你知道 别的是怎么控制连接的吗?
注意: 当我把 IIS 从混合中删除,让客户端直接连接到后端 Web 服务时,它会很高兴地打开我需要的任意多个连接,所以我肯定后端不是瓶颈。它一定是 IIS/ASP.NET 中的某种东西。
下面是 machine.config
的相关部分,我确信应用程序正在阅读它(用 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>