使用NuGet中的Rotativa 1.6.4,并使用以下代码注意到了以下问题。

ActionAsPdf会随机挂起不确定的时间。

下面的代码挂起了:

   var pdfResult = new ActionAsPdf("Report", new {id = Request.Params["id"]})
    {
        Cookies = cookieCollection,
        FormsAuthenticationCookieName = FormsAuthentication.FormsCookieName,
        CustomSwitches = "--load-error-handling ignore"
    };


可能有帮助的背景信息:

customSwitches用于忽略使用ActionAsPdf调用wkhtmltopdf.exe的已记录问题,但仅在wkhtmltopdf调用中它不会抑制代码中的错误。

观察,使用和测试:

它可以工作,但是在运行应用程序时(无论是否单步执行代码),在单击pdfResult = new ActionAsPdf并最终进入被调用的“ Report”操作之间,可能需要10秒到大约4分钟之间的任何时间。无法识别在Visual Studio的输出窗口中实际发生的任何事情,没有抛出我发现的错误。只是随机缓慢地过渡到Reports()操作。

我可以直接通过URL运行Reports()操作,它不会像这样缓慢运行,并且对于生成PDF来说是非常快的。我正在使用ActionAsPdf来运行它,以获取二进制文件以保存到文件系统并通过电子邮件发送,这是为此库指定的方法。

该行为在本地Windows 10开发箱和远程Server 2008R2测试箱中均存在。 .Net 4.5.1在两个框上,每个都使用默认IIS。

我有问题:

是否知道可能导致这种速度变慢的原因以及如何补救?

最佳答案

我最终使用UrlAsPdf()代替了ActionAsPdf(),它可以正常工作。似乎ActionAsPdf()可能存在一些问题,我在GitHub上的Rotative项目中提交了一个错误。 ActionAsPdf()仍被标记为beta,因此希望它可以在将来的版本中或由社区修复。

10-05 23:32