Не удается загрузить отчет Crystal при развертывании приложения в IIS в приложении ASP.net Mvc - PullRequest
0 голосов
/ 01 июля 2019

Я получаю сообщение об ошибке после публикации приложения. Даже на том же компьютере, на котором я перешла. Во время разработки все работало нормально.

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 голосов
/ 02 июля 2019

Я наконец решил это. Причина, по которой у меня возникла ошибка, заключалась в том, что она сохраняла ее в папке bin после публикации. Поэтому мне нужно было соответственно изменить путь. Я добавил /bin/ к
var reportPath = HttpContext.Current.Server.MapPath("~/") + "Reports//" + reportName; Как это var reportPath = HttpContext.Current.Server.MapPath ("~ / bin /") + "Reports //" + reportName; Тогда это сработало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...