Многократные вызовы файлового потока MVC - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть действие FileStreamResult, которое с помощью iTextSharp открывает документ PDF (чертеж САПР), печатает на нем информацию о нашей компании и затем передает ее в поток памяти для возврата.иметь метод аудита, который записывает транзакцию в SQL через Entity Framework.Когда я вызываю действие, я получаю три транзакции базы данных.Во время отладки приложение трижды запускает функцию записи 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;
    }

1 Ответ

1 голос
/ 08 декабря 2011

После дальнейшего расследования я обнаружил, что проблема связана с Internet Explorer.
Я исследовал PDFObject на GitHub (https://github.com/pipwerks/PDFObject/issues/3) и он указывает на статью службы поддержки Microsoft (http://support.microsoft.com/kb/293792) под названием Три запроса GET отправляются, когда вы получаете подключаемый модуль, обслуживающий контент .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...