Rotativa ActionAsPdf() 非常慢
Rotativa ActionAsPdf() Very Slow
使用 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" 正在调用操作。无法辨别 Visual Studio 的输出 window 中实际发生的任何事情,我发现没有抛出任何错误。只是随机缓慢过渡到 Reports() 操作。
我可以直接通过 URL 运行 Reports() 操作,它永远不会像这样变慢,而且生成 PDF 的速度非常快。我正在 运行 使用 ActionAsPdf 获取二进制文件以保存到文件系统并通过电子邮件发送,这是该库的规定方法。
本地 Windows 10 开发箱和远程 Server 2008R2 测试箱均存在该行为。两个盒子上的 .Net 4.5.1,每个盒子上的默认 IIS。
我的问题:
是否知道可能导致这种速度减慢的原因以及如何补救?
我最终使用 UrlAsPdf() 而不是 ActionAsPdf() 并且它有效。似乎 ActionAsPdf() 可能存在一些问题,我已经在 GitHub 上提交了 Rotative 项目的错误。 ActionAsPdf() 仍标记为测试版,因此希望它在未来的版本中或由社区修复。
就我而言,我不得不在使用 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;
使用 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" 正在调用操作。无法辨别 Visual Studio 的输出 window 中实际发生的任何事情,我发现没有抛出任何错误。只是随机缓慢过渡到 Reports() 操作。
我可以直接通过 URL 运行 Reports() 操作,它永远不会像这样变慢,而且生成 PDF 的速度非常快。我正在 运行 使用 ActionAsPdf 获取二进制文件以保存到文件系统并通过电子邮件发送,这是该库的规定方法。
本地 Windows 10 开发箱和远程 Server 2008R2 测试箱均存在该行为。两个盒子上的 .Net 4.5.1,每个盒子上的默认 IIS。
我的问题:
是否知道可能导致这种速度减慢的原因以及如何补救?
我最终使用 UrlAsPdf() 而不是 ActionAsPdf() 并且它有效。似乎 ActionAsPdf() 可能存在一些问题,我已经在 GitHub 上提交了 Rotative 项目的错误。 ActionAsPdf() 仍标记为测试版,因此希望它在未来的版本中或由社区修复。
就我而言,我不得不在使用 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;