Mam aplikację ASP.NET 4.0 działającą na szczycie IIS 7.5 na 64-bitowym komputerze z systemem Windows Server 2008 R2 Enterprise z dużą ilością pamięci RAM, procesora, dysku itp.
Przy każdym żądaniu sieci Web aplikacja ASP.NET nawiązuje połączenie z usługą internetową zaplecza (za pośrednictwem surowych gniazd), która działa na tym samym komputerze.
Problem: wydaje się, że coś ogranicza liczbę jednoczesnych połączeń z usługą internetową zaplecza. Podejrzewa się, że liczba jednoczesnych połączeń dochodzi do 16.
Znalazłem ten kluczowy artykuł firmy Microsoft wyjaśniający, jak dostosować ustawienia usług IIS, aby dostosować je do aplikacji ASP.NET, które wysyłają wiele żądań usług internetowych: http://support.microsoft.com/?id=821268#tocHeadRef
Postępowałem zgodnie z zaleceniami artykułu, ale nadal nie miałem szczęścia. Szczególnie interesujące jest maxconnection
ustawienie, na które zderzyłem się nawet z 999.
Jakieś pomysły, co jeszcze mogłoby ograniczać połączenia?
Uwaga: kiedy wyłączę usługi IIS z mieszanki i każę klientom łączyć się bezpośrednio z usługą sieciową zaplecza, z radością otworzy ona tyle połączeń, ile potrzebuję, więc jestem pewien, że zaplecze nie jest wąskim gardłem. To musi być coś w IIS / ASP.NET-land.
Oto odpowiednia sekcja, z machine.config
której jestem pewien, że jest czytana przez aplikację (weryfikowana przez 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>