2011-12-07 5 views
0

iTextSharp를 사용하여 PDF 문서 (CAD 도면)를 열고, 회사 정보를 스탬프 한 다음 반환 할 메모리 스트림에 전달하는 FileStreamResult 작업이 있습니다.MVC Filestream Multiple Calls

이 메서드에는 Entity Framework를 통해 SQL에 트랜잭션을 기록하는 감사 방법이 있습니다. 작업을 호출하면 데이터베이스 트랜잭션이 3 개 발생합니다. 응용 프로그램을 디버깅하는 동안 SQL 기록 기능이 세 번 발생합니다.

아무도 왜 이해할 수 있습니까? 이것은 라우팅과 관련이 있습니까?

EDIT 나는 몇 가지 추가 테스트를했는데 브라우저에 직접 액세스 할 때 메서드를 한 번만 호출한다는 것을 알았습니다. jQuery와 .PDFObject (www.pdfobject.com)를 사용하여 PDF를 다른보기로 렌더링합니다. 이 jQuery 메서드는 MVC 메서드를 세 번 호출합니다. 임 조사 중 ...

public class DrawingsController : BaseController 
{ 
    static BaseFont ... 

    public FileStreamResult Index(string WOBase, string WOSub) 
    { 
     //Get associated drawing by work order 
     WorkOrders WO = db.WorkOrders 
      .Where(wo => wo.DRAWING_FILE != null && wo.BASE_ID == WOBase && wo.SUB_ID == WOSub) 
      .FirstOrDefault(); 

     if (!string.IsNullOrEmpty(WO.DRAWING_FILE)) 
     { 
      //The following records the transaction history (x3) 
      BaseController.RecordNavigation(_employee.ID, "Print", WO.Drawing_URL); 

      string readerURL = modifyPathToURL(WO.DRAWING_FILE); 

      Response.Clear(); 
      MemoryStream ms = new MemoryStream(); 
      PdfReader reader = new PdfReader(readerURL); 

      PdfStamper stamper = new PdfStamper(reader, ms); 
      for (int i = 1; i <= reader.NumberOfPages; ++i) 
      { 
       var stamperOverContent = stamper.GetOverContent(i); 
       //Stamp information on document 
       ... 
       stamperOverContent.EndText(); 
       stamperOverContent.RestoreState(); 
      } 

      stamper.Writer.CloseStream = false; 
      stamper.Close(); 

      byte[] byteinfo = ms.ToArray(); 
      ms.Write(byteinfo, 0, byteinfo.Length); 
      ms.Position = 0; 
      ms.Seek(0, SeekOrigin.Begin); 

      return new FileStreamResult(ms, "application/pdf"); 
     } 
     return null; 
    } 

답변