どのように私はプログラムでWebクライアントに2接続の制限を削除することができます

StackOverflow https://stackoverflow.com/questions/866350

質問

彼らはホストごとに2つの以上の接続を使用していないの用心すべてのRFC-クライアントからの

これらの「ファイン」のRFCの任務...

MicrosoftはWebクライアントでこれを実装しました。私はそれが

をオフにすることができることを知っています

の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。」

私はあまりにも、大丈夫だと思う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">弱い参照の ServicePointManager を。同じウリのマネージャーへの以降の要求は、同じインスタンスを返します。接続は後に使用されていない場合は、GCはそれをクリーンアップします。

あなたのWebクライアントで使用されているのServicePointオブジェクトを見つけた場合は、

、あなたはその接続制限を変更することができます。 HttpWebRequestのオブジェクトは、彼らが使用して構築したものを取得するためのアクセサを持っているので、あなたはそのように行うことができます。運がよけれ場合は、一度だけそれをしなければならないと思いますので、すべての要求が同じのServicePointを共有するに終わるかもしれない。

私は制限を変更するには任意のグローバル方法を知りません。あなたが実行に十分に早くDefaultConnectionLimitを変更した場合は、おそらく罰金になると思います。

ほとんどのサーバソフトウェアは、とにかくあなたを絞るために起こっているので、

代わりに、あなただけの、接続の制限と一緒に暮らすことができます。 :)

私たちは、App.configファイル内の設定の上記部分についての状況を持っています                       

これはコンソールアプリケーションで有効であるためには、 私たちは、System.Configuration参照DLLを追加しました。 参照することなく、上記の無駄であった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top