我花了很多时间来解决这个问题,但仍在工作。我将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,但为什么另一个项目仍在工作。请帮助我,非常感谢。
答案 0 :(得分:0)
尝试不使用波浪号和正斜杠字符。
report.Load(Server.MapPath("Reports/report1.rpt"));
这希望报告(.rpt文件)在应用程序根文件夹的“报告”子文件夹中可用
答案 1 :(得分:0)
您可以使用 System.IO Path.Combine
。在那里,您只需添加文件夹名和文件名,然后获得格式正确的路径。可能看起来像这样:
string sPath = Path.Combine(@"\\" + "Reports", "report1.rpt");
您可以仅使用逗号添加字符串变量(文件夹名称)。