Rotativa [Win32Exception(0x80004005):访问被拒绝]

时间:2014-08-11 16:08:07

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

我正在使用Rotativa以PDF格式生成视图,在我的localhost上运行/完美运行。但是,当部署到GoDaddy或我的Azure网站实例上的共享主机时,我收到以下错误。

我尝试在Rotativa文件夹中授予.exe权限但没有运气,也尝试使用Full Trust运行并仍然收到错误。

ERROR / STACKTRACE

Access is denied
     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.ComponentModel.Win32Exception:Access is   拒绝

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

[Win32Exception(0x80004005):访问被拒绝]
  System.Diagnostics.Process.StartWithCreateProcess(的ProcessStartInfo   startInfo)+1789 System.Diagnostics.Process.Start()+ 6735098
  Rotativa.WkhtmltopdfDriver.Convert(String wkhtmltopdfPath,String   开关,字符串html)+226
  Rotativa.AsPdfResultBase.CallTheDriver(ControllerContext context)+26   Rotativa.AsPdfResultBase.BuildPdf(ControllerContext context)+128
  Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext context)+19   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext   controllerContext,ActionResult actionResult)+13
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList的1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
1   filters,Int32 filterIndex,ResultExecutingContext preContext,   ControllerContext controllerContext,ActionResult actionResult)+420
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext   controllerContext,IList 1 filters, ActionResult actionResult) +52
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173 System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult
1.CallEndDelegate(IAsyncResult   asyncResult)+10
  System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult的   asyncResult)+36
  System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +54
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult的   asyncResult)+28
  System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +54
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult的   asyncResult)+36
  System.Web.Mvc.Async.WrappedAsyncResultBase`1.End()+54
  System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)   +31 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult)   结果)+9
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +9514928 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+155

CONTROLLER

public ActionResult Print(Guid reportId)
{
    var report =  new ViewAsPdf("Index", new { id = reportId}) { FileName = "testReport.pdf" };
    return report;

}

权限 我试图在整个文件夹上设置权限&#34; Rotativa&#34;完全控制,现在我明白了......

  

此程序被组策略阻止。有关更多信息,请联系   您的系统管理员

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.ComponentModel.Win32Exception:此程序   被组策略阻止。有关更多信息,请与您的系统联系   管理员

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

[Win32Exception(0x80004005):此程序被组策略阻止。   有关更多信息,请联系您的系统管理员]   System.Diagnostics.Process.StartWithCreateProcess(的ProcessStartInfo   startInfo)+1789 System.Diagnostics.Process.Start()+ 6735098
  Rotativa.WkhtmltopdfDriver.Convert(String wkhtmltopdfPath,String   开关,字符串html)+226
  Rotativa.AsPdfResultBase.CallTheDriver(ControllerContext context)+26   Rotativa.AsPdfResultBase.BuildPdf(ControllerContext context)+128
  Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext context)+19   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext   controllerContext,ActionResult actionResult)+13
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList的1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
1   filters,Int32 filterIndex,ResultExecutingContext preContext,   ControllerContext controllerContext,ActionResult actionResult)+420
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext   controllerContext,IList 1 filters, ActionResult actionResult) +52
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173 System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult
1.CallEndDelegate(IAsyncResult   asyncResult)+10
  System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +49
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult的   asyncResult)+36
  System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +54
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult的   asyncResult)+28
  System.Web.Mvc.Async.WrappedAsyncResultBase 1.End() +54
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid
1.CallEndDelegate(IAsyncResult的   asyncResult)+36
  System.Web.Mvc.Async.WrappedAsyncResultBase`1.End()+54
  System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)   +31 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult)   结果)+9
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +9514928 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+155

2015年1月13日更新

我最终切换到TuesPechkin,这是一个更容易使用的解决方案。 GoDaddy和Azure一样支持FullTrust,但Azure在运行调用大多数wkhtmltopdf库所做的GDI的进程时遇到了一个已知问题。 TuesPechkin也没有在Azure上工作,所以我从未找到Azure网站的解决方案,但是TuesPechkin在我的web.config中使用该设置在GoDaddy托管上工作得很好。

2 个答案:

答案 0 :(得分:1)

我认为GoDaddy和azure网站都不允许&#34;完全信任&#34; IIS托管模式,以及运行wkhtmltopdf进程所需的模式。 如果您想使用Rotativa,您应该寻找能够提供完全信任访问权限的托管服务提供商。

答案 1 :(得分:0)

对我来说,我通过允许在文件wkhtmltopdf.exe的安全窗格上获得具有完全权限的“Everyone”来解决问题

我希望如果使用本地测试机器或虚拟机,这会帮助某人。

请注意,您还应该为保存pdf输出的文件夹提供相同的允许权限。