Programing

WebClient에서 2 개의 연결 제한을 프로그래밍 방식으로 제거하는 방법

lottogame 2020. 9. 11. 19:25
반응형

WebClient에서 2 개의 연결 제한을 프로그래밍 방식으로 제거하는 방법


이러한 "미세"RFC는 모든 RFC 클라이언트에서 호스트 당 2 개 이상의 연결을 사용하지 않도록주의해야합니다.

Microsoft는 WebClient에서이를 구현했습니다. 나는 그것을 끌 수 있다는 것을 안다.

App.config :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
 <system.net> 
  <connectionManagement> 
   <add address="*" maxconnection="100" /> 
  </connectionManagement> 
 </system.net> 
</configuration> 

( http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007에 있음 )

그러나 프로그래밍 방식으로 어떻게 할 수 있습니까?

에 Accordin http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

"DefaultConnectionLimit 속성을 변경해도 기존 ServicePoint 개체에는 영향을주지 않습니다. 변경 후 초기화 된 ServicePoint 개체에만 영향을줍니다.이 속성의 값이 직접 또는 구성을 통해 설정되지 않은 경우 기본값은 상수 DefaultPersistentConnectionLimit입니다."

WebClient를 시작할 때 제한을 구성하는 것이 가장 좋지만 프로그램 시작시 프로그래밍 방식으로이 슬픈 제한을 제거하는 것도 괜찮습니다.

내가 액세스하는 서버는 인터넷의 일반 웹 서버가 아니라 내가 제어하고 로컬 LAN에 있습니다. API 호출을하고 싶지만 웹 서비스 나 원격을 사용하지 않습니다.


여기와 다른 곳에서 몇 가지 팁을 사용하여 사용중인 WebClient 클래스를 재정 의하여 응용 프로그램에서이 문제를 해결할 수있었습니다.

class AwesomeWebClient : WebClient {
    protected override WebRequest GetWebRequest(Uri address) {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
        req.ServicePoint.ConnectionLimit = 10;
        return (WebRequest)req;
    }
}

관심있는 분들을 위해 :

System.Net.ServicePointManager.DefaultConnectionLimit = x (여기서 x는 원하는 연결 수)

추가 참조가 필요 없음

위에서 언급 한대로 서비스 지점이 생성되기 전에 이것이 호출되는지 확인하십시오.


이 솔루션을 사용하면 언제든지 연결 제한을 변경할 수 있습니다 .

private static void ConfigureServicePoint(Uri uri)
{
    var servicePoint = ServicePointManager.FindServicePoint(uri);

    // Increase the number of TCP connections from the default (2)
    servicePoint.ConnectionLimit = 40;
}

1 시간 사람이 호출 FindServicePoint 하는 ServicePoint의 인스턴스가 생성되고 WeakReference를가 내부 그것에에 저장하기 위해 만든됩니다 ServicePointManager을 . 동일한 Uri에 대해 관리자에 대한 후속 요청은 동일한 인스턴스를 반환합니다. 이후에 연결이 사용되지 않으면 GC가 연결을 정리합니다.


If you find the ServicePoint object being used by your WebClient, you can change its connection limit. HttpWebRequest objects have an accessor to retrieve the one they were constructed to use, so you could do it that way. If you're lucky, all your requests might end up sharing the same ServicePoint so you'd only have to do it once.

I don't know of any global way to change the limit. If you altered the DefaultConnectionLimit early enough in execution, you'd probably be fine.

Alternately, you could just live with the connection limit, since most server software is going to throttle you anyway. :)


We have a situation regarding the above piece of configuration in App.Config

In order for this to be valid in a CONSOLE Application, we added the System.Configuration reference dll. Without the reference, the above was useless.

참고URL : https://stackoverflow.com/questions/866350/how-can-i-programmatically-remove-the-2-connection-limit-in-webclient

반응형