HttpWebRequest работает очень медленно без прокси

#c# #asp.net-mvc #httpwebrequest

#c# #asp.net-mvc #httpwebrequest запрос

Вопрос:

Я написал этот код для чтения данных с внешнего URL-адреса.

request.GetResponse() бег занимает больше минуты и происходит очень медленно.

 string responseContent;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://payroll/PayrollReport/getPaymentHistory?number=13990701amp;reason=21amp;username=8062122amp;Credential=E5ohh/BZDBWAQBE2R8tmbUSiVGJ2/ndI3AmqDiCMBylOIK/eAdRZog==");
request.Method = "GET";
request.Proxy = GlobalProxySelection.GetEmptyWebProxy(); // null;
System.Net.ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = false;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (Stream responseStream = response.GetResponseStream())
    {
        using (StreamReader sr = new StreamReader(responseStream))
            responseContent = sr.ReadToEnd();
    }
}
 

Но при вызове этого URL-адреса с помощью post man выполняется очень быстро и работает менее 1000 мс.

введите описание изображения здесь

В сетевом захвате только свойство местоположения отличается между c # и post man

введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

Пожалуйста, помогите мне замедлить выполнение кода

Комментарии:

1. Используйте Fiddler для сравнения запросов. Мы не знаем, что происходит ни в вашей сети, ни на сервере расчета заработной платы. Кроме того, если вы, вероятно, нашли виновника, а именно, что Postman использует прокси, который работает быстро, а ваш код — нет, что медленно, почему вы не хотите использовать прокси? Или ваш актуальный вопрос «Как найти системный прокси по умолчанию» ?

2. Это сетевой вопрос. Мы не можем знать, почему ваша сеть вызывает задержки, если прокси-сервер не используется. Вы не можете исправить это с помощью кода, вы должны спросить своего сетевого администратора о правильных настройках. Я бы сказал, что они явно построили свою сеть так, чтобы только прокси-сервер имел быстрое исходящее соединение

3. Если соединения быстрее с прокси, почему бы вам не использовать прокси?

4. only location property is different это не «просто». То, что вы опубликовали, показывает перенаправление на другой URL-адрес, включая то, что выглядит как параметр сеанса. Еще раз, это не имеет ничего общего с HttpWebRequest

Ответ №1:

Я добавил AspxAutoDetectCookieSupport=1 в код, и проблема была решена.

Строка запроса AspxAutoDetectCookieSupport=1 добавляется автоматически с помощью ASP.NET на этапе обнаружения поддержки файлов cookie. Поскольку для атрибута cookieless в файле web.config установлено значение «Автоопределение», ASP.NET среда выполнения пытается определить, поддерживает ли браузер пользователя файлы cookie, и во время этого процесса добавляется параметр querystring. Если поддерживаются файлы cookie, идентификатор сеанса сохраняется в файле cookie, а если нет, идентификатор сеанса отправляется в URL всех будущих запросов этого пользователя.

 Uri target = new Uri("http://payroll/PayrollReport/getPaymentHistory?number=13990701amp;reason=21amp;username=8062122amp;Credential=E5ohh/BZDBWAQBE2R8tmbUSiVGJ2/ndI3AmqDiCMBylOIK/eAdRZog==");

string responseContent;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(target);

request.CookieContainer = new CookieContainer();         
request.CookieContainer.Add(new Cookie("AspxAutoDetectCookieSupport", "1") { Domain = target.Host });

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (Stream responseStream = response.GetResponseStream())
    {
        using (StreamReader sr = new StreamReader(responseStream))
            responseContent = sr.ReadToEnd();
    }
}