2010-05-11 5 views
5

컨트롤러의 메소드가 파일 스트림 또는 파일 또는 파일 컨텐트 결과 객체를 반환 할 때 리소스를 삭제하는 적절한 방법은 무엇입니까? 예를 들어MVC - 컨트롤러에 리소스를 처리하십시오.

은 다음과 같은 것을 할 때 :

using CrystalDecisions.CrystalReports.Engine; 

public ActionResult Report() 
{ 
    ReportClass rptH = new ReportClass(); 
    rptH.FileName = Server.MapPath("[reportName].rpt"); 
    rptH.Load(); 
    rptH.SetDataSource([datatable]); 
    Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 
    return File(stream, "application/pdf"); 
} 

(만든 것입니다) TIA

답변

6

FileStreamResult은의 WriteFile이 결과 실행 중에 호출되는 사용하여 문에서 스트림을 래핑합니다. 그러면 스트림이 닫히고 처분됩니다. 생성 된 스트림의 유형에 따라 컨트롤러 작업의 using 문에서 사용을 닫거나 감싸는 중 실제로 오류가 발생할 수 있습니다.

+0

호기심에, 그것은 FileStream 형식을 사용합니다 :'using (FileStream)'. 세상에서 무슨 일이 벌어지고있는거야? 'Type'은 일회용입니까? –

+0

@ Jeff - 실제로'FileStream'은 단지 FileStream 클래스와 같은 이름을 가진 속성입니다. – tvanfosson

+0

아, 세상에 내가 생각했던 것. 그것은 typeof (FileStream)가 아니며 속성은 약 7 줄 떨어져 있습니다. 더 cofee를 얻을 시간. D : –

관련 문제