Rotativa ActionAsPdf()很慢

时间:2015-09-29 21:39:46

标签: c# pdf asp.net-mvc-5 rotativa

使用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。

我的问题:

有什么可能导致这种减速以及如何解决它的想法?

2 个答案:

答案 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;