programing

ASP.NET 응용 프로그램이 웹 서비스에 연결할 수 있는 동시 연결 수를 제한하는 것은 무엇입니까?

stoneblock 2023. 6. 8. 19:14

ASP.NET 응용 프로그램이 웹 서비스에 연결할 수 있는 동시 연결 수를 제한하는 것은 무엇입니까?

RAM, CPU, 디스크 등의 gobs가 있는 64비트 윈도우즈 서버 2008 R2 Enterprise 시스템에서 IIS 7.5 위에서 실행되는 ASP.NET 4.0 애플리케이션이 있습니다.

모든 웹 요청 시 ASP.NET 응용 프로그램은 동일한 시스템에서 실행되는 백엔드 웹 서비스(원시 소켓을 통해)에 연결합니다.

문제:백엔드 웹 서비스에 대한 동시 연결 수를 제한하는 무언가가 있는 것 같습니다.의심스럽게도, 동시 연결 수는 16개로 정점을 찍고 있습니다.

웹 서비스 요청을 많이 하는 ASP.NET 앱을 수용하기 위해 IIS 설정을 조정하는 방법을 설명하는 Microsoft의 이 주요 기사를 찾았습니다. http://support.microsoft.com/ ?id=821268#tocHeadRef

나는 그 기사의 추천자들을 따라갔지만, 여전히 운이 없었습니다.은 특히흥설정은운입니다.maxconnection999에 도 했던.

연결을 조절할 수 있는 다른 방법은 없나요?

참고: 혼합물에서 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>

여기에 제공된 대부분의 답변은 ASP.net 응용 프로그램에서 백엔드 서비스로 보낼 수 있는 발신 요청 가 아니라 백엔드 웹 서비스로 들어오는 요청 를 나타냅니다.

여기서 요청 속도를 제한하는 것은 백엔드 웹 서비스가 아니라 호출 응용 프로그램이 동일한 엔드포인트(동일 URL)에 대해 설정하려는 열려 있는 연결 수입니다.

machine.config 파일에 다음 구성 섹션을 추가하여 이 제한을 제거할 수 있습니다.

<configuration>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="65535"/>
    </connectionManagement>
  </system.net>
</configuration>

물론 50개 또는 100개의 동시 연결과 같은 더 합리적인 숫자를 선택할 수 있습니다.하지만 위의 것들은 최대치까지 열 것입니다.모든 주소를 나타내는 '*' 대신 위의 열린 제한 규칙에 특정 주소를 지정할 수도 있습니다.

시스템용 MSDN 설명서.Net.connection 관리

.NET의 Connect Management를 이해하기 위한 또 다른 유용한 자료

이것이 당신의 문제를 해결하기를 바랍니다!

편집: 위의 코드에 언급된 연결 관리 기능이 있습니다.동일한 문제를 가진 향후 문의자와 관련이 있으므로 위의 정보를 남기겠습니다.그러나 대부분의 최신 서버에는 현재 4개의 서로 다른 machine.config 파일이 있습니다!

.NET Framework v2는 32비트와 64비트 모두에서 실행되며 .NET Framework v4도 32비트와 64비트 모두에서 실행됩니다.응용 프로그램 풀에 대해 선택한 설정에 따라 이 4개의 서로 다른 machine.config 파일 중 하나를 사용할 수 있습니다!일반적으로 다음 위치에 있는 4개의 machine.config 파일을 모두 확인하십시오.

  • C:\Windows\Microsoft.NET 프레임워크\v2.0.50727\구성
  • C:\Windows\Microsoft.NET\Framework64\v2.0.50727\구성
  • C:\Windows\Microsoft.NET\프레임워크\v4.0.30319\구성
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config

질문이 오래된 것일 수도 있지만 백엔드가 동일한 서버에서 실행되고 있다고 말씀하셨습니다.즉, 기본 포트 80이 아닌 다른 포트에 있는 것입니다.

"connectionManagement" 구성 요소를 사용할 때 기본 80과 다른 경우 포트 번호를 지정해야 한다는 것을 읽었습니다.

링크: ASP.NET에서 maxConnection 설정이 autoConfig = false도 작동하지 않을 수 있습니다.

두 번째로, 자신의 백엔드 관련 값으로 확장된 기본 구성(주소="*")을 사용하도록 선택한 경우 특정 값을 먼저 지정하는 것이 좋습니다!그렇지 않으면 요청이 이루어진 경우 *가 먼저 일치하고 기본 연결 2개가 사용됩니다.web.config의 섹션을 사용할 때와 같습니다.

링크: 연결 관리를 위한 <제거> 요소(네트워크 설정)

누군가에게 도움이 되길 바랍니다.

WCF 기반 웹 서비스 참조를 사용할 수 있습니까?기본적으로 서비스조절 동작입니다.최대 동시 통화 수는 16입니다.

서비스 참조 동작을 업데이트할 수 있습니다.<serviceThrottling>요소

<serviceThrottling
    maxConcurrentCalls="999" 
    maxConcurrentSessions="999" 
    maxConcurrentInstances="999" />

(위의 설정을 권장하는 것은 아닙니다.)적절한 구성 방법에 대한 자세한 내용은 MSDN을 참조하십시오.<behavior>원소의

정적 DefaultConnectionLimit 속성 값을 프로그래밍 방식으로 설정해 보았습니까?

다음은 프레임워크 4.0에 대한 업데이트가 포함된 IIS 7.5, IIS 7.0 및 IIS 6.0의 ASP.NET 스레드 사용에 대한 정보입니다.

이 페이지의 "스레드" 섹션을 참조하십시오. "연결" 섹션과 함께 http://msdn.microsoft.com/en-us/library/ff647786.aspx, .

processModel 설정의 maxconnection 속성을 up 해보셨습니까?

웹 서비스 소모품을 호스팅하는 웹 서비스, 응용 프로그램 또는 서버(아파치 또는 IIS)에 정의되지 않은 경우 오류가 발생할 때까지 무한 연결을 만들 수 있습니다.

성능 테스트를 수행하는 동안 RPS는 서버가 허용 가능한 대기 시간 내에 처리할 수 있는 초당 요청 수를 나타냅니다.

이론적으로 서버 한 대는 코어 수만큼의 요청만 동시에 실행할 수 있습니다.

ASP.net 의 스레드화 모델은 잠재적으로 수천 개의 rps를 제공할 수 있기 때문에 문제가 있는 것으로 보이지 않습니다.당신의 지원서가 문제인 것 같습니다.동기화 기본 요소를 사용하고 있습니까?

또한 웹 서비스의 대기 시간은 얼마입니까? 응답 속도가 매우 빠릅니까(마이크로초 이내), 그렇지 않으면 비동기 호출을 고려하여 차단하지 않을 수 있습니다.

이것이 무언가를 만들어내지 못한다면, 당신은 비주얼 스튜디오나 레드게이트 프로파일러를 사용하여 당신의 코드를 프로파일링하고 싶을 것입니다.

언급URL : https://stackoverflow.com/questions/7849884/what-is-limiting-the-of-simultaneous-connections-my-asp-net-application-can-ma