在ASP.net Mvc应用程序的IIS中部署应用程序时,Crystal Report无法加载

时间:2019-07-01 16:05:01

标签: c# asp.net .net asp.net-mvc crystal-reports

发布应用程序后出现错误。即使在我使用的同一台计算机上。在开发过程中一切正常。

The system cannot find the path specified.
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.Runtime.InteropServices.COMException: The system cannot find the path specified.

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: 


[COMException (0x80004005): The system cannot find the path specified.
]
   CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) +0
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) +126
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +315

[CrystalReportsException: Load report failed.]
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +503
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) +1495
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) +99
   ProductionTracker.Web.Reports.CrystalReportGenerator.GenerateReportInPDF(DataTable tb, String reportName) in C:\Users\barry\source\repos\ProductionTracker.Web\ProductionTracker.Web\Reports\Controller\CrystalReportGenerator.cs:37
   System.Web.Mvc.<>c__DisplayClass1.<WrapVoidAction>b__0(ControllerBase controller, Object[] parameters) +18
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +229
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +77
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +387
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +38
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +188
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +43
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +602
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +195
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +128

我尝试了这个https://stackoverflow.com/a/14602748/10852981,但我不知道在我的mvc应用程序中将其添加到何处。 我检查了文件的权限,并允许所有人使用。 我在项目中包括了.rpt文件。 我不确定我还应该做什么。

这是我下载文件的代码

public static void GenerateReportInPDF(DataTable tb, string reportName)
        {
            using (var reportDocument = new ReportDocument())
            {
                var reportPath = HttpContext.Current.Server.MapPath("~/") + "Reports//" +  reportName;
                reportDocument.Load(reportPath);
                reportDocument.Database.Tables[0].SetDataSource(tb);             

       reportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, HttpContext.Current.Response, false, reportName);
                reportDocument.Close();
            }
        }

此行ProductionTracker.Web.Reports.CrystalReportGenerator.GenerateReportInPDF(DataTable tb, String reportName) in C:\Users\barry\source\repos\ProductionTracker.Web\ProductionTracker.Web\Reports\Controller\CrystalReportGenerator.cs:37 看起来不对,因为它来自我的开发仓库。但是我不确定该怎么办。

1 个答案:

答案 0 :(得分:0)

我终于解决了。我出现错误的原因是因为它一旦发布便将其保存到bin文件夹中。所以我需要相应地更改路径。我将/bin/添加到了
var reportPath = HttpContext.Current.Server.MapPath("~/") + "Reports//" + reportName; 像这样 var reportPath = HttpContext.Current.Server.MapPath(“〜/ bin /”)+“ Reports //” + reportName; 然后成功了!