Rob*_*ers 88 asp.net iis web-services
我有一个ASP.NET 4.0应用程序在64位Windows Server 2008 R2企业版机器上的IIS 7.5上运行,有大量的RAM,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-land中的东西.
以下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>
Run Code Online (Sandbox Code Playgroud)
Ben*_*yne 101
此处提供的大多数答案都解决了对后端Web服务的传入请求数,而不是您可以从ASP.net应用程序向后端服务发出的传出请求数.
这不是你的后端web服务限制你的请求率,它是你的调用应用程序愿意建立到同一端点(相同的URL)的开放连接的数量.
您可以通过将以下配置部分添加到machine.config文件来消除此限制:
<configuration>
<system.net>
<connectionManagement>
<add address="*" maxconnection="65535"/>
</connectionManagement>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如果你想要50或100个并发连接,你当然可以选择一个更合理的数字.但是上面会打开它直到最大.您还可以为上面的开放限制规则指定特定地址,而不是指示所有地址的"*".
System.Net.connectionManagement的MSDN文档
另一个了解.NET中ConnectManagement的重要资源
希望这能解决你的问题!
编辑:哎呀,我看到你有上面的代码中提到的连接管理.我将留下我的上述信息,因为它与未来的查询者有相同的问题.但请注意,大多数最新服务器上目前有4种不同的machine.config文件!
在32位和64位下运行.NET Framework v2以及在32位和64位下运行的.NET Framework v4.根据您为应用程序池选择的设置,您可以使用这4个不同的machine.config文件中的任何一个!请检查通常位于此处的所有4个machine.config文件:
小智 7
我意识到问题可能相当陈旧,但你说后端运行在同一台服务器上.这意味着在不同的端口上,可能不是默认端口80.
我已经读过,当您使用"connectionManagement"配置元素时,如果端口号与默认值80不同,则需要指定端口号.
LINK:在ASP.NET中,maxConnection设置甚至可能无法工作autoConfig = false
其次,如果您选择使用使用您自己的后端特定值扩展的默认配置(address ="*"),您可以考虑将特定值放在第一位!否则,如果发出请求,则*首先匹配,并且默认采用2个连接.就像在web.config中使用该部分一样.
LINK:<remove>连接管理元素(网络设置)
希望它可以帮助某人.
您可能正在使用基于WCF的Web服务引用吗?默认情况下,ServiceThrottlingBehavior.MaxConcurrentCalls为16.
您可以尝试更新服务引用行为的<serviceThrottling>元素
<serviceThrottling
maxConcurrentCalls="999"
maxConcurrentSessions="999"
maxConcurrentInstances="999" />
Run Code Online (Sandbox Code Playgroud)
(请注意,我建议使用上面的设置.)有关如何配置适当元素的更多信息,请参阅MSDN<behavior>.
请参阅本页的“线程”部分:http://msdn.microsoft.com/en-us/library/ff647786.aspx以及“连接”部分。
您是否尝试过提高 processModel 设置的 maxconnection 属性?
| 归档时间: |
|
| 查看次数: |
94499 次 |
| 最近记录: |