Tôi có một ứng dụng ASP.NET 4.0 đang chạy trên đỉnh IIS 7.5 trên máy Windows Server 2008 R2 Enterprise 64-bit với bộ nhớ RAM, CPU, đĩa, v.v.
Với mọi yêu cầu web, ứng dụng ASP.NET tạo kết nối với dịch vụ web phụ trợ (thông qua các ổ cắm thô) đang chạy trên cùng một máy.
Vấn đề: Dường như có điều gì đó giới hạn số lượng kết nối đồng thời với dịch vụ web phụ trợ. Thật đáng ngờ, số lượng kết nối đồng thời đang đứng đầu là 16.
Tôi đã tìm thấy bài viết quan trọng này của Microsoft giải thích cách tinh chỉnh cài đặt IIS 'để chứa các ứng dụng ASP.NET tạo ra nhiều yêu cầu dịch vụ web: http://support.microsoft.com/?id=821268#tocHeadRef
Tôi đã làm theo lời giới thiệu của bài báo, nhưng vẫn không may mắn. Cài đặt đặc biệt thú vị là maxconnection
cài đặt, mà tôi thậm chí đã chạm đến 999.
Bất kỳ ý tưởng nào khác có thể được điều chỉnh kết nối?
Lưu ý: Khi tôi cắt IIS ra khỏi hỗn hợp và để các máy khách kết nối trực tiếp với dịch vụ web phụ trợ, nó sẽ vui vẻ mở ra nhiều kết nối mà tôi cần, vì vậy tôi khẳng định rằng phần phụ trợ không phải là nút cổ chai. Nó phải là một cái gì đó trong IIS / ASP.NET-land.
Đây là phần có liên quan machine.config
mà tôi chắc chắn đang được ứng dụng đọc (được xác minh bằng 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>