[C#] HttpWebRequest 사용시 2개의 연결 수정

728x90
반응형

 

HttpWebRequest 객체의 BeginGetResponse 메소드를 이용해서 비동기 프로세스를 구축 할 수 있습니다.

하지만 이와 같은 시스템 구축시, 서버당 2개의 TCP 연결 제한이 걸리게 되는 현상이 발생합니다.

사내에서 부하테스를 하는 과정에서 해당 구문을 사용했을 때, 2개의 커넥션만 발생하는 문제가 발생되어

이를 해결하기 위한 방법을 정리하였습니다.

 

 

app.config 설정 추가

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

connectionManagement의 maxconnection 값의 수치를 변경합니다.

DefaultConnectionLimit 의 기본값은 2로 설정이 되어 있으며, 위 처럼 app.config에 설정을 추가함으로서 커넥션의 수치를 변경할 수 있습니다.

 

하지만, DefaultConnectionLimit 등록 정보를 변경해도 기존 ServicePoint 객체에는 영향을주지 않습니다.

 

 

ServicePoint 값 변경

request.ServicePoint.ConnectionLimit = 1000;

request.BeginGetResponse(
    GetResponseCallback,
    new RequestState
    {
        Request = request,
        PostData = new byte[] { },
        Response = signal
    });

아쉽게도 설정파일로 설정이 적용되지 않는 경우 기본값은 DefaultPersistentConnectionLimit 상수로 설정됩니다.

이럴경우에는 직접 ServicePoint의 ConnectionLimit 값을 변경해서 사용해줘야 합니다.

위 처럼

request.ServicePoint.ConnectionLimit = 1000;

 

ServicePoint 의 ConnectionLimit 값을 변경해주면, 2개 이상의 TCP 커넥션을 사용 하 실 수 있습니다.

 

 

 

 

 

 

 

 

[출처]

http://daplus.net/net-webclient%EC%97%90%EC%84%9C-2-%EA%B0%9C%EC%9D%98-%EC%97%B0%EA%B2%B0-%EC%A0%9C%ED%95%9C%EC%9D%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C-%EC%A0%9C/

 

https://social.msdn.microsoft.com/Forums/en-US/1f863f20-09f9-49a5-8eee-17a89b591007/asynchronous-httpwebrequest-maximum-connections-best-approach-threads-or-delegates?forum=netfxnetcom

 

 

 

728x90