私は、iTextSharpを使用してPDF文書(CAD図面)を開き、会社の情報をスタンプし、返されるメモリストリームに渡すFileStreamResultアクションを持っています。MVCファイルストリーム複数呼び出し
このメソッドの中には、トランザクションをEntity Frameworkを介してSQLに記録する監査メソッドがあります。私がアクションを呼び出すと、私は3つのデータベーストランザクションを取得します。アプリケーションをデバッグすると、SQLレコード関数が3回ヒットします。
誰でも私の理解を助けることができますか?これはルーティングと関係がありますか?
EDITさらにテストを行い、ブラウザに直接アクセスするとメソッドを1回呼び出すことがわかりました。私は.PDFObject(www.pdfobject.com)でjQueryを使用して、別のビューの中にPDFをレンダリングしています。このjQueryメソッドは、MVCメソッドを3回呼び出しています。私はまだ調査中です...
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;
}