Я работаю над веб-приложением, которое работает с ASP.Net 3.5Slow WebClient.DownloadString?
Где-то в приложении я звоню во внешнюю систему. Этот вызов состоит по загрузке строки из определенного URL:
string targetUrl = BuildMyUrl();
WebClient wc = new WebClient();
string data = wc.DownloadString(targetUrl);
Этот код работает довольно хорошо с приемлемым временем отклика (до 500 мс).
Однако в конкретных случаях это время отклика более 15 секунд. Я могу воспроизвести поведение, и я могу ясно видеть, что долгое время находится на вызове DownloadString
.
Я не понимаю, почему это происходит в моем сценарии.
Вы скажете: «Эй, это целевая система, которая медленная». Но я не смог воспроизвести поведение вне моего приложения (я создал небольшое консольное приложение, которое изолирует код ошибки. Никогда не получайте никаких проблем).
Я не знаю, где искать сейчас, чтобы понять проблему. Что может привести к тому, что данные простой загрузки будут длинными?
FYI: целевая система является службой аутентификации. Целевой URL имеет вид:
HTTP S: // mysystem/проверить билет = XXXYYY
Может быть, протокол HTTPS проблема?.
Может ли использование класса WebClient в IIS изменять поведение WebClient?
[Edit] Я пробовал:
- Чтобы явно установить
Proxy
свойство объекта WebClient обнулить Я заменил вызов DownloadData по этому коду:
вар req = (HttpWebRequest) WebRequest.CreateDefault (новый Uri (targetUrl)); используя (ответ вара = (HttpWebResponse) req.GetResponse()) { использования (вар ср = новый StreamReader (response.GetResponseStream())) { данные = sr.ReadToEnd(); }}
Ни один из этого теста не были успешными.
Это происходит в условиях тяжелой нагрузки? –
@FelicePollano: no. Это происходит в конкретном случае, I.E. после выписки, затем снова войдите в систему аутентификации.Но только из пользовательского веб-приложения (не из приложения тестовой консоли). –
WebClient очень медленный. Я бы обычно пошел на простой подход к сокетам, но это было бы очень сложно сделать для https. – CodingBarfield