Ich habe eine ASP.NET 4.0-Anwendung, die auf IIS 7.5 auf einem 64-Bit-Windows Server 2008 R2 Enterprise-Computer mit RAM, CPU, Festplatte usw. ausgeführt wird.
Bei jeder Webanforderung stellt die ASP.NET-Anwendung eine Verbindung zu einem Backend-Webdienst (über Raw-Sockets) her, der auf demselben Computer ausgeführt wird.
Problem: Es scheint etwas zu geben, das die Anzahl der gleichzeitigen Verbindungen zum Backend-Webdienst einschränkt. Verdächtigerweise liegt die Anzahl der gleichzeitigen Verbindungen bei 16.
Ich habe diesen Schlüsselartikel von Microsoft gefunden, in dem erläutert wird, wie die Einstellungen von IIS angepasst werden, um ASP.NET-Apps aufzunehmen, die viele Webdienstanforderungen stellen: http://support.microsoft.com/?id=821268#tocHeadRef
Ich folgte den Empfehlungen des Artikels, aber immer noch kein Glück. Die Einstellung, die besonders interessant ist maxconnection
, ist die Einstellung, die ich sogar auf 999 gestoßen habe.
Irgendwelche Ideen, was sonst noch Verbindungen drosseln könnte?
Hinweis: Wenn ich IIS aus dem Mix herausschneide und die Clients eine direkte Verbindung zum Backend-Webdienst herstellen, werden so viele Verbindungen wie nötig geöffnet, sodass ich mir sicher bin, dass das Backend nicht der Engpass ist. Es muss etwas in IIS / ASP.NET-Land sein.
Hier ist der relevante Abschnitt, von dem machine.config
ich sicher bin, dass er von der Anwendung gelesen wird (überprüft mit 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>