2

私はあなたが意図した方法で HttpWebRequest を使用しています: 使い終わったら応答を破棄します.これにより、利用可能な TCP 接続が再利用されることを期待しています.応答が受信されます。TCPView を使用すると、これが発生することがわかります。

ここに私の HttpWebRequest コードがあります:

 private HttpWebResponse ExecuteRequest(String baseRelativeUri, String method, Ds postValues) {

        /////////////////////////////////////////
        // Set-up

        Uri uri = new Uri( _baseUri, baseRelativeUri );

        _cookies.ProcessDomains();

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( uri );
        request.CookieContainer = _cookies;
        request.Method          = method;
        request.UserAgent       = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";

        if( postValues != null ) SetPostContent( request, postValues );

        /////////////////////////////////////////
        // Response

        return (HttpWebResponse)request.GetResponse();
    }

    protected HtmlDocument ExecuteRequestHtml(String baseRelativeUri, String method, Ds postValues, HttpStatusCode expectedStatusCode) {

        using(HttpWebResponse response = ExecuteRequest(baseRelativeUri, method, postValues)) {

            if( response.StatusCode != expectedStatusCode ) throw new WebException("Did not receive " + expectedStatusCode + " response.");

            /////////////////////////////////////////
            // HtmlDocument

            using(Stream stream = response.GetResponseStream()) {

                HtmlDocument doc = new HtmlDocument();
                doc.Load( stream );
                return doc;
            }
        }
    }

MSDN によると、HttpWebRequest.KeepAlive プロパティは既定で true であり、HttpWebRequest.Pipelines も同様です。それで、私は何を間違っていますか?

ありがとう!

4

1 に答える 1

3

HttpWebRequest が尊重する「ホストごとに 2 つの同時接続」ルールを実行していたことがわかりました。

解決策は、次の静的プロパティを設定することです。

System.Net.ServicePointManager.DefaultConnectionLimit = 15;

並べ替え:)

于 2012-05-27T22:27:54.953 に答える