2009-12-18 3 views
1

У меня есть контроллер MVC с действиемMVC действие занимает много времени, чтобы вернуться

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

     return filePath; 
} 

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

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

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

ответ

2

Я работала в подобную проблему при попытке экспорта в 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(); 

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

+0

Отлично, спасибо :-) – Coppermill