Использование wkhtmltopdf внутри asp.net MVC занимает много времени, чтобы начать - PullRequest
6 голосов
/ 15 марта 2012

Я использую wkhtmltopdf для загрузки страницы и создания PDF, как описано в здесь . Все работает как положено, но когда достигает следующей строки:

int read = proc.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length);

Продолжение занимает очень много времени. Я также попробовал следующее:

proc.Start();
string output = proc.StandardOutput.ReadToEnd();
string error = proc.StandardError.ReadToEnd();
proc.WaitForExit();

Но то же самое происходит со строкой 2 (proc.StandardOutput.ReadToEnd()).

Как я могу отладить это?

Примечание. Поскольку я отлаживаю весь проект, я вижу, что страница, вызываемая процессом wkhtmltopdf, вызывается только после задержки. Таким образом, происходит задержка между вызовом ОС и самой загрузкой страницы.


Редактировать

Итак, я изменил часть аргументов просто на http://google.com -, и она была выполнена довольно быстро.

Так что проблема в моем полном аргументе: --stop-slow-scripts --redirect-delay 1500 --cookie MOODLEID_ %25E2%25C8%2513E%25BD --cookie ASP.NET_SessionId mg3mfaisk45zn5y1aql0glbb --cookie .ASPXAUTH FEA3D10032E211EDB330E967D8F19A324A912AD792219CA281451AA809F1B580B25466DAF81DE30DF07252FF13F0888C88ED4DB5871579F1DA3EBAA447CBF860131F6FF00A763C9207CE13BCB143301E49A2B00EEBBF1F4AE14F109DF1BE8D3B39C43478B99E4C686C3849D1D51DDBFA3D2E871691BAB8346FE5195D867F88F662F72E40 http://localhost:8404/Relatorio/GeralEstaticoPDF?id=15&pesq_cod=0&IncluirParciais=True&NomesImagens[0]=3fd5b6a2-76a4-470b-af99-93500cc90431.png&NomesImagens[1]=c1c86234-c338-4285-9d25-5069be36a213.png&NomesImagens[2]=4562f9a3-72aa-452c-9736-6d0ba65f59ce.png&NomesImagens[3]=dbc54344-6248-4ee3-9e43-9cb3ef89cc67.png&NomesImagens[4]=8c954917-d572-4d4a-b6fd-2b9cd09e8f8e.png -

Мне нужны куки, чтобы сохранить сеанс.

Если я запускаю это непосредственно в командной строке (но вводя имя файла вместо -), оно также работает быстро.


Редактировать 2

Так что проблема, безусловно, в том, что куки-файлы, если я их удаляю, они выполняются быстро, НО это дает мне только экран входа в систему в pdf, поскольку он не сохраняет сеанс.

Ответы [ 3 ]

4 голосов
/ 05 июня 2015

Ответ PhilJ правильный, но я хотел бы добавить возможное решение для любых будущих посетителей.

Короче:

Добавление атрибута [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] в контроллер (выполняется печать)Я решил эту проблему.

Я на самом деле использую библиотеку Rotativa, которая в свою очередь использует wkhtmltopdf.

(Вероятно, было бы полезно добавить тег Rotativa к вопросу?)

3 голосов
/ 21 июня 2012

Кажется, это файл cookie сеанса, который вызывает проблему, файл cookie проверки подлинности форм в порядке или любой другой файл cookie в этом отношении.Таким образом, причина:

"Чтобы избежать коллизий данных в хранилище сеансов и непредвиденного поведения состояния сеанса, классы SessionStateModule и SessionStateStoreProviderBase включают в себя функциональность блокировки, которая исключительно блокирует элемент хранилища сеансов для конкретного сеанса на времявыполнение страницы ASP.NET. "

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatestoreproviderbase%28VS.80%29.aspx

1 голос
/ 04 августа 2016

Я добавлю свой опыт, так как столкнулся с ним в двух разных проектах.

Мои параметры для создания PDF:

string[] options = new string[] { 
            "--cookie", "ASP.NET_SessionId", System.Web.HttpContext.Current.Session.SessionID,
            "--cookie", ".ASPNETAUTH", HttpContext.Current.Request.Cookies[".ASPNETAUTH"].Value};

Затем я добавляю: EnableSessionState="ReadOnly" в заголовок страницы вызывающего абонента, и это работает.

...