使用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&#34之间,它可以是10秒到4分钟之间的任何地方。 ;行动被召唤。无法识别Visual Studio输出窗口中实际发生的任何事情,没有发现我发现的错误。只需随机慢慢过渡到Reports()动作。
我可以通过URL直接运行Reports()动作,它永远不会像这样慢,并且对于PDF生成来说非常快。我正在使用ActionAsPdf运行它以获取要保存到文件系统的二进制文件并通过电子邮件发送,这是为此库执行此操作的规定方法。
此行为存在于本地Windows 10开发框和远程Server 2008R2测试框中。两个盒子上都有.Net 4.5.1,每个盒子都有默认的IIS。
我的问题:
有什么可能导致这种减速以及如何解决它的想法?
答案 0 :(得分:1)
我最终使用UrlAsPdf()而不是ActionAsPdf()并且它可以工作。似乎ActionAsPdf()可能存在一些问题,我在GitHub上提交了一个关于Rotative项目的错误。 ActionAsPdf()仍然标记为测试版,因此希望它在未来版本或社区中得到修复。
答案 1 :(得分:0)
就我而言,除了使用UrlAsPdf()之外,我还需要做一些其他调整。我已将问题缩小到要添加的Cookie集合中。因此,我尝试仅添加所需的cookie,此问题已解决。以下是我使用的示例代码。
var report = new UrlAsPdf(url);
Dictionary<string, string> cookieCollection = new Dictionary<string, string>();
foreach (var key in Request.Cookies.AllKeys)
{
if (Crypto.Hash("_user").Equals(key))
{
cookieCollection.Add(key, Request.Cookies.Get(key).Value);
break;
}
}
report.Cookies = cookieCollection;
report.FormsAuthenticationCookieName = FormsAuthentication.FormsCookieName;