2012-03-15 71 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"到主叫方的頁頭和它的作品。

相關問題