2012-03-15 45 views
4

我正在使用wkhtmltopdf下载页面并创建PDF,作为解释here。这一切都按预期工作,但当它到达以下行:在asp.net中使用wkhtmltopdf mvc需要很长时间才能启动

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进程正在调用的页面在延迟后才被调用。所以延迟发生在OS调用和页面下载之间。


编辑

所以我改变了参部分简单地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 -

我需要的cookie来保存会话。

如果我直接在命令行上运行它(但将文件名放在-之内),它运行速度也很快。


编辑2

所以问题肯定是饼干,如果我将其快速执行删除它们,但它只是给我的登录屏幕上的PDF格式,因为它不是保存会话。

回答

1

这似乎是导致问题的会话cookie,表单auth cookie是好的或任何其他cookie的事情。原因如下:

“为避免会话存储中的数据冲突和意外的会话状态行为,SessionStateModule和SessionStateStoreProviderBase类包含锁定功能,该功能在执行期间专门锁定特定会话的会话存储项目的ASP.NET页面“。

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

+0

感谢PhilJ你是对的! – vladimir77 2013-12-05 09:26:25

2

PhilJ的答案是正确的,但,我想补充一个可能的解决方案为未来的访客。

简而言之:

添加[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]属性控制器(执行打印)解决了这个问题对我来说。

我实际上使用的是Rotativa库,它使用wkhtmltopdf。

(它可能会有助于增加Rotativa标签质疑?)

+0

你好,我希望你读一读。 我使用没有MVC和wkhtmltopdf的asp.net。 我有相同的会话问题,所以我添加'EnableSessionState =“ReadOnly”'到打印页面,但仍然登录屏幕。如果我添加sesion cookie id作为wkhtmltopdf的参数,我的应用程序就像PhilJ说的那样挂起。 你知道我可以做的其他事吗? – 2016-04-15 10:17:15

+0

好吧,它不会挂,需要两分钟:( – 2016-04-15 10:34:03

+0

完美答案! – 2017-03-06 18:19:41

0

我将添加我的经验,因为我在两个不同的项目跑了进去。

我生成的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"到主叫方的页头和它的作品。

相关问题