首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是什么限制了我的ASP.NET应用程序可以同时连接到web服务的数量?

是什么限制了我的ASP.NET应用程序可以同时连接到web服务的数量?
EN

Stack Overflow用户
提问于 2011-10-21 21:12:56
回答 7查看 102.3K关注 0票数 91

我有一个运行在IIS7.5之上的ASP.NET 4.0应用程序,运行在64位的Windows Server2008 R2企业版机器上,有大量的内存、处理器、磁盘等。

对于每个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验证):

代码语言:javascript
复制
<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>
EN

回答 7

Stack Overflow用户

发布于 2011-10-26 12:19:15

这里提供的大多数答案都是针对后端here服务的传入请求数量,而不是您可以从ASP.net应用程序向后端服务发出的请求数量。

在这里,并不是你的后端URL服务在限制你的请求速率,而是你的调用应用程序愿意建立到相同端点(相同URL)的开放连接的数量。

您可以通过在machine.config文件中添加以下配置节来消除此限制:

代码语言:javascript
复制
<configuration>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="65535"/>
    </connectionManagement>
  </system.net>
</configuration>

当然,如果您愿意,也可以选择一个更合理的数字,比如50或100个并发连接。但是上面的代码会让它直接打开到max。您还可以为上面的开放限制规则指定特定地址,而不是表示所有地址的“*”。

MSDN Documentation for System.Net.connectionManagement

Another Great Resource for understanding ConnectManagement in .NET

希望这能解决你的问题!

编辑: Oops,我确实看到你在上面的代码中提到了连接管理。我会留下我的上述信息,因为它是相关的,以供将来有同样的问题的询问者。但是,请注意目前在最新的服务器上有4个不同的machine.config文件!

.NET框架v2可以在32位和64位下运行,.NET框架v4也可以在32位和64位下运行。根据您为应用程序池选择的设置,您可以使用这4个不同的machine.config文件中的任何一个!请检查通常位于以下位置的所有4个machine.config文件:

  • C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG
  • C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
票数 106
EN

Stack Overflow用户

发布于 2014-10-15 20:57:08

我知道这个问题可能有点老了,但是你说后端运行在同一台服务器上。这意味着在不同的端口上,可能不是默认端口80。

我读到过,当您使用"connectionManagement“配置元素时,如果端口号不同于默认的80,则需要指定端口号。

链接:maxConnection setting may not work even autoConfig = false in ASP.NET

其次,如果您选择使用默认配置(address="*"),并且扩展了您自己的后端特定值,那么您可以考虑将特定值放在第一位!否则,如果发出请求,*将首先匹配,并采用默认的2个连接。就像使用web.config中的节一样。

链接: Element for connectionManagement (Network Settings)

希望这能帮助到别人。

票数 7
EN

Stack Overflow用户

发布于 2011-10-25 00:57:56

有没有可能您正在使用基于WCF的web服务引用?默认情况下,ServiceThrottlingBehavior.MaxConcurrentCalls为16。

您可以尝试更新服务引用行为的<serviceThrottling>元素

代码语言:javascript
复制
<serviceThrottling
    maxConcurrentCalls="999" 
    maxConcurrentSessions="999" 
    maxConcurrentInstances="999" />

(请注意,我建议使用上面的设置。)有关如何配置适当的<behavior>元素的详细信息,请参阅MSDN

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7849884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档