为什么server.mapPath在生产中是无效的报告文件路径,但是本地计算机是有效的?

时间:2019-01-22 04:20:48

标签: asp.net crystal-reports

我花了很多时间来解决这个问题,但仍在工作。我将server.mapPath函数用于特定的有效路径文件。为什么只有本地计算机可以工作但不能在生产环境中工作,因为我这个(server.mapPath)是一个很棒的功能

c#

[WebMethod]
public string getDocument(string id, string location)
{
  ReportDocument report = new ReportDocument();
  report.Load(Server.MapPath("~/Reports/report1.rpt"));
  Stream stream = report.ExportToStream(ExportFormatType.PortableDocFormat);
  MemoryStream streamReader = new MemoryStream();

  stream.CopyTo(streamReader);

  return Convert.ToBase64String(streamReader.ToArray());
}

ajax

function printPreview(reqID) {                        
            var base_url = "/Webservice/webService.asmx/getDocument";
            $.ajax({
                type: "POST",
                url: base_url,
                data: "{'id': " + reqID + ", 'location':'" + objUser.location + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    console.log(response.d)
                },
                error: function (response) {
                    alert(response.d);
                }
            });

检查API后端 当我在生产环境中使用File.Exists函数在没有ReportDocument.Load的情况下进行测试并且结果返回文件存在但无法加载时,出现ReportDocument.Load时出现问题的原因是什么?还有其他人知道吗?

错误例外

Could not load file or assembly 'CrystalDecisions.CrystalReports.Engine, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.

我正在从web.config中的13.0.2000.0-> 13.0.3500.0中添加bindingRedirect,但仍然无法正常工作。我在服务器生产C:/ Windows / assembly中看到所有(CrystalDecisions.Shared,CrystalDecisions.CrystalReports.Engine,CrystalDecisions.ReportSource)的版本均为13.0.2000.0,但为什么另一个项目仍在工作。请帮助我,非常感谢。

2 个答案:

答案 0 :(得分:0)

尝试不使用波浪号和正斜杠字符。

report.Load(Server.MapPath("Reports/report1.rpt"));

这希望报告(.rpt文件)在应用程序根文件夹的“报告”子文件夹中可用

答案 1 :(得分:0)

您可以使用 System.IO Path.Combine。在那里,您只需添加文件夹名和文件名,然后获得格式正确的路径。可能看起来像这样:

string sPath = Path.Combine(@"\\" + "Reports", "report1.rpt");

您可以仅使用逗号添加字符串变量(文件夹名称)。