hardkoded / puppeteer-sharp

Headless Chrome .NET API
https://www.puppeteersharp.com
MIT License
3.24k stars 431 forks source link

PdfDataAsync timeout in IIS #2657

Open yuxiang970813 opened 3 weeks ago

yuxiang970813 commented 3 weeks ago

Hi, my project's print function has been running smoothly for the past few weeks and no code updates have been made, but since May 27th it is suddenly not working properly. When the print button is pressed, PdfDataAsync gets stuck until it times out. I have tried upgrading to the latest version (18.0.1) or downgrading to other versions of PuppeteerSharp to no avail, and I have noticed that PdfDataAsync works when debugging in Visual Studio, but gets stuck if publishing to IIS. I also created a new project and published to another server and it still happens.

Here is the code of the printing function:

BrowserFetcher browserFetcher = new();
await browserFetcher.DownloadAsync();
await using IBrowser browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, });
await using IPage page = await browser.NewPageAsync();
await page.SetViewportAsync(new ViewPortOptions { Width = 794, Height = 1123 });
await page.GoToAsync(Security.DecodeBase64(url));

byte[] pdfStream = await page.PdfDataAsync();

return File(pdfStream, "application/pdf");

And here is the error message get from event viewer:

System.TimeoutException: Timeout of 180000 ms exceeded
   at PuppeteerSharp.Helpers.TaskHelper.WithTimeout[T](Task`1 task, TimeSpan timeout, Func`2 exceptionFactory) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/Helpers/TaskHelper.cs:line 185
   at PuppeteerSharp.Cdp.CdpCDPSession.SendAsync(String method, Object args, Boolean waitForCallback, CommandOptions options) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/Cdp/CdpCDPSession.cs:line 112
   at PuppeteerSharp.CDPSession.SendAsync[T](String method, Object args, CommandOptions options) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/CDPSession.cs:line 44
   at PuppeteerSharp.Cdp.CdpPage.PdfInternalAsync(String file, PdfOptions options) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/Cdp/CdpPage.cs:line 829
   at PuppeteerSharp.Page.PdfAsync(String file, PdfOptions options) in /home/runner/work/puppeteer-sharp/puppeteer-sharp/lib/PuppeteerSharp/Page.cs:line 382
   at ltis2023.Controllers.PrintingController.Pdf(String url, Boolean isPortrait)
kjenova commented 3 weeks ago

Hi, I had the same problem and I fixed it by moving to PuppeteerExtraSharp, which works out of the box in my case.

The base PuppeteerSharp package would need an extra package to work in IIS, but that package isn't compatible with the last version of it:

https://stackoverflow.com/a/62429184/2373249 https://github.com/hardkoded/puppeteer-sharp/issues/2219

yuxiang970813 commented 3 weeks ago

Hi, I had the same problem and I fixed it by moving to PuppeteerExtraSharp, which works out of the box in my case.

The base PuppeteerSharp package would need an extra package to work in IIS, but that package isn't compatible with the last version of it:

https://stackoverflow.com/a/62429184/2373249 #2219

Thanks kjenova, the PuppeteerExtraSharp works for me! But I would like to know why puppeteer-sharp does not support this feature now?

kblok commented 2 weeks ago

Thank you for the report. I'm on vacation right now. I'll take a look at it on Monday!

rogerfar commented 1 day ago

Thanks @kjenova, I ran into the same issue.

But it only stopped working when I upgraded to Puppeteer 18, it worked fine in 17.