1. ホーム
  2. .net

[解決済み] WebClientの2つの接続制限をプログラムで解除するには?

2023-04-04 09:29:35

質問

これらの "fine" RFC は、すべての RFC クライアントに対して、1 ホストあたり 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 )

しかし、プログラム的にどうすればいいのでしょうか?

によると http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

DefaultConnectionLimitプロパティを変更しても、既存のServicePointオブジェクトには影響がありません。 変更後に初期化されたServicePointオブジェクトにのみ影響します。 のみに影響します。このプロパティの値が直接または設定によって設定されていない場合 このプロパティの値が直接または構成によって設定されていない場合、その値はデフォルトで 定数 DefaultPersistentConnectionLimit." になります。

WebClient をインスタンス化するときに制限を設定するのがベストですが、私のプログラムの開始時にこの悲しい制限をプログラムで削除するだけでも問題ないでしょう。

私がアクセスするサーバーは、インターネット上の通常の Web サーバーではなく、私の制御下にあるローカル LAN にあるものです。私は API 呼び出しを行いたいのですが、Web サービスまたはリモーティングを使用しません。

どのように解決するのですか?

ここや他の場所からのいくつかのヒントで、私は使用していたWebClientクラスをオーバーライドすることによって、私のアプリケーションでこれを修正することに成功しました。

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