HttpWebRequest-重用TCP连接

HttpWebRequest-重用TCP连接,tcp,httpwebrequest,connection,Tcp,Httpwebrequest,Connection,我使用HttpWebRequest的方式与您想要的一样:在我处理完响应后处理它,希望这能使它重用任何可用的TCP连接,但实际上并非如此:它在收到响应后关闭连接。我在使用TCPView时看到了这种情况 以下是我的HttpWebRequest代码: private HttpWebResponse ExecuteRequest(String baseRelativeUri, String method, Ds postValues) { //////////////////////

我使用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也是如此。那么我做错了什么


谢谢

事实证明,我达到了HttpWebRequest遵守的“每个主机2个同时连接”规则

解决方案是设置此静态属性:

System.Net.ServicePointManager.DefaultConnectionLimit = 15;
排序:)