У мене є програма ASP.NET 4.0, яка працює поверх IIS 7.5 на 64-розрядному комп'ютері Windows Server 2008 R2 Enterprise з модулями оперативної пам'яті, процесором, диском тощо.
З кожним веб-запитом програма ASP.NET встановлює підключення до серверної веб-служби (через необроблені сокети), яка працює на тій самій машині.
Проблема. Здається, існує щось, що обмежує кількість одночасних підключень до серверної веб-служби. Підозріло, що кількість одночасних з'єднань досягає 16.
Я знайшов цю ключову статтю від Microsoft, яка пояснює, як налаштувати параметри IIS для розміщення програм ASP.NET, які роблять багато запитів веб-служб: http://support.microsoft.com/?id=821268#tocHeadRef
Я дотримувався рекомендацій статті, але все одно не везло. Особливо цікавим є maxconnection
параметр, який я навіть зіткнувся з 999.
Будь-які ідеї, що ще може бути придушенням зв’язків?
Примітка: Коли я виключаю IIS із суміші і замовлюю клієнтів, які підключаються безпосередньо до серверної веб-служби, він із задоволенням відкриє стільки підключень, скільки мені потрібно, тому я впевнений, що серверна система не є вузьким місцем. Це має бути щось у 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>