Rotativa PDF generation working locally but not on IIS 7

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-18 11:41:42

问题


I have an ASP.NET MVC 5 application. It has a simple form and when the user submits it, the form is stored in the cache and then another controller action is called, this action will return the model as a view as a PDF.

I have no need to save it locally, just to show it in the browser so that the user can download it.

There is no need for a database either, that is why I store the model in the cache.

Locally, on Visual studio 2013, it works fine. But when I publish it to IIS 7 I get an Unhandled Execution Error. Here is the stack trace that I get back:

 Unhandled Execution Error
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Exception:

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[Exception]
   Rotativa.WkhtmltopdfDriver.Convert(String wkhtmltopdfPath, String switches, String html) +1364
   Rotativa.WkhtmltopdfDriver.ConvertHtml(String wkhtmltopdfPath, String switches, String html) +70
   Rotativa.ViewAsPdf.CallTheDriver(ControllerContext context) +1986
   Rotativa.AsPdfResultBase.BuildPdf(ControllerContext context) +380
   Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext context) +69
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +109
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +890
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +97
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34248 

I first used ActionAsPDF() but now I also tried to use return new ViewAsPDF(). Both give the same error and stack trace. Does this have to do something with permissions?


回答1:


This error is a missing C++ redistributable Package for Visual Studio 2013 file called (MSVCP120.dll).

To solve the issue:

  1. Open the C++ redistributable Package for Visual Studio 2013 downloadable link below: download Visual C++ Redistributable Packages for Visual Studio 2013

  2. Click Download and choose the file (vcredist_x86.exe) even if you are running X64 bit server version.

  3. Install the file.

Check Jalal W Hijazi Blog http://jwhijazi.blogspot.com/2015/05/solving-rotativa-unhandled-exception.html for more details.




回答2:


As mentioned in the comments on the blog linked in the answer, you can just copy the 2 following dll files to the rotativa folder on the server if you don't want to / can't easily install things on the server.

msvcr120.dll
msvcp120.dll

If it's working locally, you should have the two dll files available already. You need the x86 versions, if you find x64 versions packaged with vs 2015 they don't work. I found the right versions here:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT

After upgrading to Rotativa 1.7.3 this no longer worked. I had to copy over some new dlls from visual studio 2017, i found them here this time:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT

and i had to copy over

msvcp140.dll
vcruntime140.dll




回答3:


The accepted answer almost worked for me. I was missing a newer version of the C++ redistributable so installing the old version didn't help.

The easiest way to find out what you are missing is to run wkhtmltopdf.exe manually. It will either give you console output (if working) or a message box about what's missing.

I was missing MSVCP140.dll, which is from the VS 2015 redist, available here: https://www.microsoft.com/en-gb/download/details.aspx?id=48145




回答4:


I fixed my issue by updating the wkhtmltopdf files from the installer found here

Working flawlessly now!




回答5:


When I upgraded from Rotativa 1.6.4 to 1.7.3 my PDF conversion on my website app stopped working and after running the wkhtmltopdf.exe on my production server I noticed it was having an issue with msvcp140.dll

Solution was to install Visual C++ Redistributable for Visual Studio 2015 https://www.microsoft.com/en-us/download/details.aspx?id=48145




回答6:


I faced the same problem. Even the error logger wasn't logging anything.

After some research, I tried replacing the wkhtmltopdf.exe with the latest version available in wkhtmltopdf.org website, still no luck.

Finally copied msvcp120.dll and msvcr120.dll to the folder where I had the excutable and it worked. (There was no need of the latest version of wkhtmltopdf.exe, instead it worked with the version what I got from Nuget.)

msvcp120.dll and msvcr120.dll were available in the below directory in Windows 7.

C:\Windows\SysWOW64\




回答7:


I installed Visual C ++ Redistributable Packages for Visual Studio 2015

https://www.microsoft.com/pt-br/download/details.aspx?id=48145

This solved for me.




回答8:


I faced this problem twice and it have many causes: 1- Maybe you are missing C++ redistributable (MSVCP120.dll)..

2- if you are hosting in a specific domain click application pool->click on your domain(example.net)->advance setting ->Check you identity in process Model:you should login as administrator User..

if your website on default application pool you should click on Default Web Site->basic setting ->connect as : administrator User



来源:https://stackoverflow.com/questions/31112349/rotativa-pdf-generation-working-locally-but-not-on-iis-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!