UPDATE
Смотрите решение внизу.
Я пытаюсь загрузить отчеты в моем приложении ASP.Net MVC в цикле. Первые два всегда успешны, а третий всегда терпит неудачу. Неважно, в каком порядке я их запускаю, это всегда третий сбой (что означает, что важен не конкретный отчет, а последовательность). Когда отчеты успешно выполняются, они всегда возвращаются менее чем через 10 секунд, поэтому на самом деле это не время ожидания. Пожалуйста, смотрите код и сценарии ниже.
Код
public Stream SomeMethodThatDownloadReports(string link)
{
using (var webClient = new WebClient())
{
webClient.Credentials = configuration.GetNetworkCredentialsForDownload();
try
{
return new MemoryStream(webClient.DownloadData(link));
}
catch (Exception ex)
{
throw new ReportDownloadFailureException(string.Format("Problem accessing Report. Report Url = {0}", link), ex);
}
}
}
Сценарии
- Не пропустите
- A - Успешно <10 секунд </li>
- B - Успешно <10 секунд </li>
- C - Тайм-аут
- Пропустить
- A - Пропустить
- B - Успешно в течение <10 секунд </li>
- C - Успешно в течение <10 секунд </li>
- D - Тайм-аут
- Randomize
- B - Успешно в течение <10 секунд </li>
- G - Успешно <10 секунд </li>
- H - Тайм-аут
* * ОБНОВЛЕНИЕ тысячи сорок-девять
Как оказалось. Истинная причина тайм-аутов заключалась в том, что NHibernate пытался обновить объекты, даже если он не должен (длинная история) являться предпосылкой для вызова отчетов. По какой-то причине ему удалось успешно сбросить вызовы до того, как отчет был вызван для первых двух вызовов, но по третьему он всегда отставал и вызывал тупик в базе данных ... отсюда время ожидания.