Iis 7 Rotativa PDF生成在本地工作,但不在IIS 7上工作

Iis 7 Rotativa PDF生成在本地工作,但不在IIS 7上工作,iis-7,asp.net-mvc-5,rotativa,Iis 7,Asp.net Mvc 5,Rotativa,我有一个ASP.NETMVC5应用程序。它有一个简单的表单,当用户提交表单时,表单存储在缓存中,然后调用另一个控制器操作,该操作将以PDF格式的视图形式返回模型 我不需要在本地保存它,只需要在浏览器中显示它,以便用户可以下载它 也不需要数据库,这就是我将模型存储在缓存中的原因 在本地,在Visual studio 2013上,它运行良好。但是当我将它发布到IIS7时,我得到一个未处理的执行错误。下面是我得到的堆栈跟踪: Unhandled Execution Error Description

我有一个ASP.NETMVC5应用程序。它有一个简单的表单,当用户提交表单时,表单存储在缓存中,然后调用另一个控制器操作,该操作将以PDF格式的视图形式返回模型

我不需要在本地保存它,只需要在浏览器中显示它,以便用户可以下载它

也不需要数据库,这就是我将模型存储在缓存中的原因

在本地,在Visual studio 2013上,它运行良好。但是当我将它发布到IIS7时,我得到一个
未处理的执行错误
。下面是我得到的堆栈跟踪:

 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 
未处理的执行错误
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。
异常详细信息:系统。异常:
源错误:
在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别。
堆栈跟踪:
[例外]
Rotativa.WkhtmltopdfDriver.Convert(字符串wkhtmltopdfPath、字符串开关、字符串html)+1364
Rotativa.WkhtmltopdfDriver.ConvertHtml(字符串wkhtmltopdfPath、字符串开关、字符串html)+70
Rotativa.ViewAsPdf.CalldDriver(控制器上下文)+1986
Rotativa.AsPdfResultBase.BuildPdf(ControllerContext上下文)+380
Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext上下文)+69
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1过滤器、Int32过滤器索引、ResultExecutingContext预文本、ControllerContext ControllerContext、ActionResult ActionResult)+109
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1过滤器、Int32过滤器索引、ResultExecutingContext预文本、ControllerContext ControllerContext、ActionResult ActionResult)+890
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1过滤器,ActionResult ActionResult)+97
System.Web.Mvc.Async.c__显示类21.b__1e(IAsyncResult asyncResult)+241
System.Web.Mvc.Controller.b_u1d(IAsyncResult asyncResult,ExecuteCorerate 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.b_uu5(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步骤,布尔值&同步完成)+288
版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.34248

我最初使用的是
ActionAsPDF()
,但现在我也尝试使用
返回新视图aspdf()
。两者都给出相同的错误和堆栈跟踪。这是否与权限有关

>此错误是VisualStudio 2013文件(MsCPP120 .dll)的C++可重分配包丢失。

要解决这个问题:

> p>打开VisualStudio 2013可下载链接的C++可重分发包:

  • 单击下载并选择文件(vcredit_x86.exe),即使您运行的是X64位服务器版本

  • 安装该文件


  • 查看Jalal W Hijazi博客了解更多详细信息。

    我通过更新找到的安装程序中的wkhtmltopdf文件修复了我的问题


    现在工作完美无瑕

    如回答中链接的博客评论所述,如果您不想/无法轻松在服务器上安装东西,您可以将以下2个dll文件复制到服务器上的
    rotativa
    文件夹中

    msvcr120.dll

    msvcp120.dll

    如果它在本地工作,您应该已经有两个dll文件可用。 您需要x86版本,如果发现与vs 2015打包的x64版本不起作用。我在这里找到了正确的版本:

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT
    
    升级到Rotativa 1.7.3后,此功能不再有效。我不得不从visual studio 2017复制一些新的DLL,这次我在这里找到了它们:

    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT
    
    我不得不抄过来

    msvcp140.dll


    vcruntime140.dll

    我也面临同样的问题。甚至错误记录器也没有记录任何东西

    经过一些研究,我尝试用网站上提供的最新版本替换
    wkhtmltopdf.exe
    ,但仍然没有成功

    最后,将
    msvcp120.dll
    msvcr120.dll
    复制到我拥有excutable的文件夹中,并运行起来。(不需要wkhtmltopdf.exe的最新版本,而是使用我从Nuget获得的版本。)

    msvcp120.dll和msvcr120.dll在Windows 7的以下目录中可用

    C:\Windows\SysWOW64\

    被接受的答案几乎对我有用。我错过了一个更新版本的C++可重新分配,所以安装旧版本没有帮助。p> 查找您缺少的内容的最简单方法是手动运行
    wkhtmltopdf.exe
    。它要么给你控制台输出(如果工作的话),要么给你一个关于缺少什么的消息框


    我丢失了MSVCP140.dll,它来自VS 2015 redist,可在此处找到:

    当我从Rotativa 1.6.4升级到1.7.3时,我的网站应用程序上的PDF转换停止工作,在我的生产服务器上运行wkhtmltopdf.exe后,我注意到它与MSVCP140.dll有问题

    解决方案是安装VisualC++ +可分发的VisualStudio 2015


    我为Visual Studio 2015安装了Visual C++可再发行软件包