Я столкнулся с неприятной ситуацией. Мы пытаемся использовать PuppeteerSharp в нашем приложении для создания фонового PDF-файла, и, хотя он хорошо работает в режиме разработки, он не работает в производственной среде.
Приложение представляет собой сайт WebAPI 2.0, .NET4.7.1, Windows 10 автомат. Основные различия, которые я мог бы видеть между двумя средами:
- сборка в Release вместо Debug: вызов моего кода из консольного приложения в режиме отладки или выпуска, похоже, работает одинаково
- Хостинг в IIS Express в разработке и полный IIS в производстве
Мы используем следующий код:
var launchOptions = new LaunchOptions
{
DefaultViewport = new ViewPortOptions
{
Width = 1920,
Height = 1080,
IsLandscape = printOptions.Orientation == PrintOrientation.Landscape
},
ExecutablePath = this._chromiumPath,
Timeout = Timeout,
TransportFactory = AspNetWebSocketTransport.AspNetTransportFactory
};
var browser = await Puppeteer.LaunchAsync(launchOptions)
.ConfigureAwait(false);
var page = await browser.NewPageAsync()
.ConfigureAwait(false);
await page.EmulateMediaTypeAsync(PuppeteerSharp.Media.MediaType.Print)
.ConfigureAwait(false);
await page.GoToAsync(url, Timeout, new[] { WaitUntilNavigation.Networkidle0 })
.ConfigureAwait(false);
await page.WaitForTimeoutAsync(2000)
.ConfigureAwait(false);
var options = new PdfOptions
{
Width = printOptions.Format == PrintFormat.A4 ? "210mm" : "297mm",
Height = printOptions.Format == PrintFormat.A4 ? "297mm" : "420mm",
PrintBackground = true,
Landscape = printOptions.Orientation == PrintOrientation.Landscape,
MarginOptions = new PuppeteerSharp.Media.MarginOptions
{
Top = ".4in",
Bottom = ".4in",
Left = ".4in",
Right = ".4in"
}
};
await page.PdfAsync(outputFile, options)
.ConfigureAwait(false);
return result;
page.GoToAsync
никогда не возвращается, и в конечном итоге out.
Изменить:
- Я установил ConfigureAwait на
false
во всех асинхронных c вызовах - Я пробовал использовать
AspNetWebSocketTransport.AspNetTransportFactory
транспортная фабрика, которая вроде тоже не работает