Saya memiliki aplikasi ASP.NET 4.0 yang berjalan di atas IIS 7.5 pada mesin Windows Server 2008 R2 64-bit dengan sekumpulan RAM, CPU, disk, dll.
Dengan setiap permintaan web, aplikasi ASP.NET membuat sambungan ke layanan web backend (melalui soket mentah), yang berjalan di mesin yang sama.
Masalah: Tampaknya ada sesuatu yang membatasi # koneksi simultan ke layanan web backend. Yang mencurigakan, jumlah koneksi bersamaan mencapai 16.
Saya menemukan artikel kunci ini dari Microsoft yang menjelaskan cara mengubah pengaturan IIS untuk mengakomodasi aplikasi ASP.NET yang membuat banyak permintaan layanan web: http://support.microsoft.com/?id=821268#tocHeadRef
Saya mengikuti rekomendasi artikel, tetapi tetap tidak berhasil. Setting yang paling menarik adalah maxconnection
settingnya, yang bahkan saya temukan 999.
Ada ide apa lagi yang bisa menjadi penghambat koneksi?
Catatan: Ketika saya menghentikan IIS dari campuran dan meminta klien terhubung langsung ke layanan web backend, itu akan dengan senang hati membuka sebanyak mungkin koneksi yang saya butuhkan, jadi saya yakin backend bukanlah penghambat. Itu pasti sesuatu di IIS / ASP.NET-land.
Inilah bagian yang relevan machine.config
yang saya yakin sedang dibaca oleh aplikasi (diverifikasi dengan 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>