iis-7 asp.net-mvc-5 rotativa

Generación de PDF Rotativa trabajando localmente pero no en IIS 7



iis-7 asp.net-mvc-5 (8)

Tengo una aplicación MVC 5 ASP.NET. Tiene un formulario simple y cuando el usuario lo envía, el formulario se almacena en el caché y luego se llama a otra acción del controlador, esta acción devolverá el modelo como una vista como un PDF.

No tengo necesidad de guardarlo localmente, solo mostrarlo en el navegador para que el usuario pueda descargarlo.

Tampoco es necesaria una base de datos, por eso almaceno el modelo en la memoria caché.

A nivel local, en Visual Studio 2013, funciona bien. Pero cuando lo publico en IIS 7 obtengo un Unhandled Execution Error . Aquí está el rastro de pila que recibo de vuelta:

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

Primero utilicé ActionAsPDF() pero ahora también traté de usar el return new ViewAsPDF() . Ambos dan el mismo error y el seguimiento de la pila. ¿Esto tiene que ver algo con los permisos?


Arreglé mi problema actualizando los archivos wkhtmltopdf desde el instalador que se encuentra here

¡Trabajando impecablemente ahora!


Como se menciona en los comentarios en el blog vinculado en la respuesta, puede copiar los 2 archivos dll siguientes a la carpeta rotativa en el servidor si no desea / no puede instalar fácilmente las cosas en el servidor.

msvcr120.dll
msvcp120.dll

Si está funcionando localmente, ya debería tener disponibles los dos archivos dll. Necesita las versiones x86, si encuentra que las versiones x64 empaquetadas con vs 2015 no funcionan. He encontrado las versiones correctas aquí:

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

Después de actualizar a Rotativa 1.7.3 esto ya no funcionó. Tuve que copiar algunas dlls nuevas de Visual Studio 2017, las encontré aquí esta vez:

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

y tuve que copiar encima

msvcp140.dll
vcruntime140.dll


Cuando actualicé de Rotativa 1.6.4 a 1.7.3, la conversión de PDF en la aplicación de mi sitio web dejó de funcionar y, después de ejecutar wkhtmltopdf.exe en mi servidor de producción, noté que tenía un problema con msvcp140.dll

La solución fue instalar Visual C ++ Redistributable para Visual Studio 2015 https://www.microsoft.com/en-us/download/details.aspx?id=48145


Este error es un paquete faltante de C ++ redistribuible para Visual Studio 2013 llamado (MSVCP120.dll).

Para resolver el problema:

  1. Abra el siguiente enlace descargable del paquete redistribuible de C ++ para Visual Studio 2013: descargue los paquetes redistribuibles de Visual C ++ para Visual Studio 2013

  2. Haga clic en Descargar y elija el archivo (vcredist_x86.exe) incluso si está ejecutando la versión del servidor de X64 bits.

  3. Instala el archivo.

Consulte el blog de Jalal W Hijazi http://jwhijazi.blogspot.com/2015/05/solving-rotativa-unhandled-exception.html para obtener más detalles.



La respuesta aceptada casi funcionó para mí. Me faltaba una versión más nueva de C ++ redistribuible, por lo que la instalación de la versión anterior no me ayudó.

La forma más sencilla de descubrir lo que se está perdiendo es ejecutar wkhtmltopdf.exe manualmente. Le dará una salida de consola (si está funcionando) o un cuadro de mensaje sobre lo que falta.

Me faltaba MSVCP140.dll, que es de la redista de VS 2015, disponible aquí: https://www.microsoft.com/en-gb/download/details.aspx?id=48145


Me enfrenté a este problema dos veces y tiene muchas causas: 1- Tal vez falte C ++ redistributable (MSVCP120.dll) ..

2- si está alojando en un dominio específico, haga clic en grupo de aplicaciones-> haga clic en su dominio (example.net) -> configuración avanzada -> verifique su identidad en el proceso Modelo: debe iniciar sesión como usuario administrador .

Si su sitio web está en el grupo de aplicaciones predeterminado, debe hacer clic en Sitio web predeterminado-> configuración básica -> conectarse como: administrador Usuario


Me enfrenté al mismo problema. Incluso el registrador de errores no estaba registrando nada.

Después de algunas investigaciones, intenté reemplazar el wkhtmltopdf.exe con la última versión disponible en el here web here , aún sin suerte.

Finalmente copié msvcp120.dll y msvcr120.dll a la carpeta en la que tenía el excutable y funcionó. (No hubo necesidad de la última versión de wkhtmltopdf.exe, en su lugar funcionó con la versión que obtuve de Nuget).

msvcp120.dll y msvcr120.dll estaban disponibles en el siguiente directorio en Windows 7.

C: / Windows / SysWOW64 /