どのように私はプログラムでWebクライアントに2接続の制限を削除することができます
-
21-08-2019 - |
質問
これらの「ファイン」のRFCの任務...
MicrosoftはWebクライアントでこれを実装しました。私はそれが
をオフにすることができることを知っていますのApp.configます:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
</configuration>
しかし、どのように私はプログラム的にそれを行うことができますか?
「DefaultConnectionLimitプロパティを変更しても、既存のには影響はありません ServicePointオブジェクト。それがあるだけのServicePointオブジェクトに影響します 変更後に初期化。このプロパティの値がされていない場合 、直接または構成を介して設定する値のデフォルト 定数DefaultPersistentConnectionLimit。」
私はあまりにも、大丈夫だと思うWebクライアントをインスタンス化するが、ちょうど私のプログラムの開発の開始時に、プログラムでこの悲しい制限を削除する際の制限を設定することが最善たいと思います。
私はアクセスサーバーは、インターネットではなく、私のコントロールの下で、地域のLAN内の正規のWebサーバではありません。私は、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;
}
}
他のヒント
興味のある方のために:
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や<のhref = "HTTPS ://msdn.microsoft.com/en-us/library/system.weakreference.aspx "のrel = "nofollowをnoreferrer">弱い参照の
、あなたはその接続制限を変更することができます。 HttpWebRequestのオブジェクトは、彼らが使用して構築したものを取得するためのアクセサを持っているので、あなたはそのように行うことができます。運がよけれ場合は、一度だけそれをしなければならないと思いますので、すべての要求が同じのServicePointを共有するに終わるかもしれない。
私は制限を変更するには任意のグローバル方法を知りません。あなたが実行に十分に早くDefaultConnectionLimitを変更した場合は、おそらく罰金になると思います。
ほとんどのサーバソフトウェアは、とにかくあなたを絞るために起こっているので、代わりに、あなただけの、接続の制限と一緒に暮らすことができます。 :)
私たちは、App.configファイル内の設定の上記部分についての状況を持っています
これはコンソールアプリケーションで有効であるためには、 私たちは、System.Configuration参照DLLを追加しました。 参照することなく、上記の無駄であった。