이러한 “미세”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>
그러나 프로그래밍 방식으로 어떻게 할 수 있습니까?
에 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가 연결을 정리합니다.
답변
WebClient에서 사용중인 ServicePoint 개체를 찾으면 연결 제한을 변경할 수 있습니다. HttpWebRequest 개체에는 사용하도록 구성된 개체를 검색 할 수있는 접근자가 있으므로 그렇게 할 수 있습니다. 운이 좋으면 모든 요청이 동일한 ServicePoint를 공유 할 수 있으므로 한 번만 수행하면됩니다.
한계를 변경하는 글로벌 방법을 모릅니다. 실행 초기에 DefaultConnectionLimit을 변경했다면 아마 괜찮을 것입니다.
또는 대부분의 서버 소프트웨어가 어쨌든 당신을 제한 할 것이기 때문에 당신은 연결 제한을 가지고 살 수 있습니다. 🙂
답변
App.Config에서 위의 구성과 관련된 상황이 있습니다.
이것이 CONSOLE 애플리케이션에서 유효하도록 System.Configuration 참조 dll을 추가했습니다. 참조가 없으면 위의 내용은 쓸모가 없었습니다.