Имам приложение, което работи на компютър и изтегля файлове от уеб сървър, работещ във вградено устройство, което е свързано към компютъра чрез RNDIS през USB. RNDIS връзката изглежда като мрежов адаптер и ми позволява да изпълнявам TCP/IP връзки между компютъра и вграденото устройство.
Когато устройството е включено, мога да използвам уеб браузър, за да видя съдържанието на устройството в рамките на няколко секунди. Но когато приложението ми се изпълнява, първото извикване на HttpClient отнема 90 секунди, за да завърши. След това. HttpClient работи нормално. Ако затворя приложението си и го отворя отново, HttpClient вече работи правилно при първия опит. Забавянето от 90 секунди при стартиране на приложението е много забележимо за потребителите.
Този проблем изглежда се появява само на някои компютри, но не и на други. Опитах да използвам HttpClient, WebClient и HttpWebRequest, но резултатите са същите. Също така експериментирах с настройките в ServicePointManager и ServicePoint, след като прочетох други теми в StackOverflow, но те нямат ефект при този проблем.
Мога да демонстрирам проблема, като използвам само тези няколко реда код в конзолно приложение:
static async Task Main(string[] args)
{
using (HttpClient httpClient = new HttpClient())
{
string url = "http://169.254.21.151/eventlog/2020-10-11.txt";
for (; ; )
{
DateTime t1 = DateTime.Now;
try
{
HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(url);
DateTime t2 = DateTime.Now;
string content = await httpResponseMessage.Content.ReadAsStringAsync();
DateTime t3 = DateTime.Now;
TimeSpan dt1 = t2 - t1;
TimeSpan dt2 = t3 - t2;
Console.WriteLine($"Http Read {content.Length} bytes after {dt1.TotalMilliseconds:F0} ms + {dt2.TotalMilliseconds:F0} ms");
}
catch (HttpRequestException)
{
DateTime t2 = DateTime.Now;
TimeSpan dt = t2 - t1;
Console.WriteLine($"Http Failed to read after {dt.TotalMilliseconds:F0} ms");
}
await Task.Delay(1000);
}
}
}
Тествах кода по-горе така:
- Включете вграденото устройство
- Използвайте уеб браузър, за да тествате HTTP връзка и да изтеглите файл
- Стартирайте горния код
Резултатите показват, че първото извикване на httpClient.GetAsync(url) отнема 90 секунди, за да завърши. 90 секунди ми се струват подозрително число, което предполага, че някъде има настройка за изчакване, която все още не съм намерил. Измереното забавяне от 90 секунди е много последователно при множество тестове.
Http Read 1106623 bytes after 90449 ms + 0 ms
Http Read 1106623 bytes after 1080 ms + 0 ms
Http Read 1106623 bytes after 1070 ms + 0 ms
Http Read 1106623 bytes after 1110 ms + 0 ms
Има ли някъде настройка, която пропускам?