Медленный первый HTTP-запрос с HttpWebRequest - PullRequest
1 голос
/ 26 февраля 2020

Поэтому я пытаюсь использовать HttpWebRequest в моем плагине C# для Revit (программное обеспечение BIM), чтобы отправить запрос в мой API. Но каждый раз, когда я пытаюсь это сделать, это занимает намного больше времени, чем запрос в Chrome / Firefox / Postman.

Если я отправляю свой запрос с помощью Postman, это занимает от 1 до 1,5 секунд. Но если я отправлю его в своем заявлении, это займет от 21 до 21,5 секунд. Похоже, что HttpWebrequest создал какое-то время ожидания, но я не могу понять, почему это так.

Мой код:

static public string Get(string baseURI, Dictionary<string, string> requestParameters)
    {
        ServicePointManager.UseNagleAlgorithm = false;
        ServicePointManager.DefaultConnectionLimit = 15;
        string requestURI = baseURI;

        if (requestURI.Length != 0)
        {
            foreach (KeyValuePair<string, string> parameter in requestParameters)
            {
                if (requestURI[requestURI.Length - 1] != '?')
                {
                    requestURI = requestURI + '&';

                }
                requestURI = requestURI + parameter.Key + "=" + parameter.Value;
            }
        }

        HttpWebRequest request = WebRequest.Create(requestURI) as HttpWebRequest;

        request.Method = "GET";
        string results = string.Empty;
        request.Proxy = null;
        request.KeepAlive = false;

        HttpWebResponse response;
        using (response = request.GetResponse() as HttpWebResponse)
        {
            // Get the response stream  
            StreamReader reader = new StreamReader(response.GetResponseStream());
            results = reader.ReadToEnd();
            reader.Close();
            response.Close();
        }

        return results;
    }

I ' мы попробовали следующее:

  • Использование RestSharp

  • Использование HttpWebRequest

  • Отправка двух запросов ( то же самое для двух разных запросов), где второй запрос занимает всего 1,5 секунды, как и должно быть.

  • Я пробовал request.Proxy = null; / ServicePointManager.UseNagleAlgorithm = false; / request.KeepAlive / ServicePointManager.DefaultConnectionLimit = 15;

Я не могу думать ни о чем другом, и отладчик не дает мне никакой полезной информации о том, что он делает в этих 20 секунд.

...