Azure Web应用中SelectPDF突发‘导航超时’转换错误求助
问题背景
部署在Azure上的.NET 6.0 WebAPI应用已稳定运行超一年,近期多数调用SelectPDF将Razor视图生成的HTML转为PDF的控制器方法报错,本地运行正常,Azure环境失败,未修改过应用配置,使用SelectPDF 21.0版本。错误信息如下:
Message = Conversion error: Navigation timeout.
Stack Trace = at SelectPdf.HtmlToImage.?(String A_0, String A_1, String A_2, ?& A_3, String& A_4)
at SelectPdf.HtmlToPdf.?(String A_0, String A_1, String A_2, String A_3, Boolean A_4)
at SelectPdf.HtmlToPdf.ConvertHtmlString(String htmlString, String baseUrl)
at AL.WebAPI.Controllers.FloorPlanDiagramController.PrintStandardFloorPlanDiagramsByPlanId(Int32 planId) in C:\Projects\AL-WEBAPI\al-webapi\AL.WebAPI\Controllers\FloorPlanDiagramController.cs:line 559
Source = Select.Pdf
解决方案
延长SelectPDF导航超时时间
Azure环境的资源调度可能比本地慢,默认超时阈值不足以完成转换。初始化HtmlToPdf实例时显式设置更长的超时:var htmlToPdf = new HtmlToPdf(); htmlToPdf.Options.NavigationTimeout = 30000; // 示例设置为30秒,可根据实际情况调整检查Azure App Service资源使用情况
查看Azure门户中应用的CPU、内存、磁盘IO监控指标,如果资源使用率持续偏高,会导致PDF转换过程变慢触发超时。考虑升级App Service计划的层级,分配更多资源。排查HTML外部资源加载问题
Razor视图生成的HTML若包含外部图片、CSS或JS资源,在Azure环境中可能加载缓慢或无法访问:- 确认所有外部资源的URL在Azure环境下可正常访问,避免引用本地内网路径
- 将小型资源(如图片)转为Base64嵌入HTML,减少外部请求依赖
清理临时文件并确保资源释放
Azure上的临时文件积累可能影响转换效率,确保转换完成后释放HtmlToPdf资源,并配置合理的临时目录:using (var htmlToPdf = new HtmlToPdf()) { htmlToPdf.Options.TemporaryFilesFolder = Path.GetTempPath(); // 执行转换逻辑 }升级SelectPDF版本
21.0版本发布时间较早,后续版本可能修复了Azure环境下的兼容性问题。先在本地测试升级到最新稳定版,确认无兼容问题后部署到Azure。检查Azure网络配置
确认Azure App Service的出站网络规则未限制SelectPDF渲染引擎(基于Chromium)的必要网络访问,同时排查所在区域是否有网络波动情况。
内容的提问来源于stack exchange,提问作者elitz

