我正在使用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
1 filters,Int32 filterIndex,ResultExecutingContext preContext, ControllerContext controllerContext,ActionResult actionResult)+420
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList1 filters, ActionResult actionResult) +52
1.CallEndDelegate(IAsyncResult asyncResult)+10
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
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
1.CallEndDelegate(IAsyncResult的 asyncResult)+36
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
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +54
1.CallEndDelegate(IAsyncResult的 asyncResult)+28
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
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +54
1.CallEndDelegate(IAsyncResult的 asyncResult)+36
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
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
1 filters,Int32 filterIndex,ResultExecutingContext preContext, ControllerContext controllerContext,ActionResult actionResult)+420
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList1 filters, ActionResult actionResult) +52
1.CallEndDelegate(IAsyncResult asyncResult)+10
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
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49
1.CallEndDelegate(IAsyncResult的 asyncResult)+36
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
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +54
1.CallEndDelegate(IAsyncResult的 asyncResult)+28
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
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +54
1.CallEndDelegate(IAsyncResult的 asyncResult)+36
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
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托管上工作得很好。
答案 0 :(得分:1)
我认为GoDaddy和azure网站都不允许&#34;完全信任&#34; IIS托管模式,以及运行wkhtmltopdf进程所需的模式。 如果您想使用Rotativa,您应该寻找能够提供完全信任访问权限的托管服务提供商。
答案 1 :(得分:0)
对我来说,我通过允许在文件wkhtmltopdf.exe的安全窗格上获得具有完全权限的“Everyone”来解决问题
我希望如果使用本地测试机器或虚拟机,这会帮助某人。
请注意,您还应该为保存pdf输出的文件夹提供相同的允许权限。