MVC Действие, требующее много времени, чтобы вернуться - PullRequest
1 голос
/ 18 декабря 2009

У меня есть контроллер MVC с действием

public ActionResult GeneratePDF(string id)
{
      FileContentResult filePath = this.File(pdfBuffer, MediaTypeNames.Application.Pdf);

      return filePath;
}

И по некоторым причинам это занимает более 20 секунд, когда он попадает на обратную линию.

pdfBuffer работает нормально, и когда я запускаю его на своем VS, все в порядке, но когда я развертываюсь в IIS 6, он работает медленно.

Кто-нибудь знает почему?

1 Ответ

2 голосов
/ 18 декабря 2009

Я столкнулся с подобной проблемой при попытке экспорта в XLS и PDF, единственное, что, похоже, улучшило время отклика, - это отправка ответа непосредственно из класса, который генерирует файл, например:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.BufferOutput = true;
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + file + ".pdf");
HttpContext.Current.Response.BinaryWrite(stream.ToArray());
HttpContext.Current.Response.Flush();
stream.Close();
HttpContext.Current.Response.End();

Но если вы сделаете это, вы получите "not all code paths return a value" от ActionMethod, чтобы избежать того, что мы просто отправим:

return new EmptyResult();

Эта последняя строка фактически никогда не будет выполнена, потому что мы заканчиваем запрос непосредственно в методе.

...