WCF服务" ProjB"需要调用函数" ProcRpt(字符串日期)"在另一个项目" ProjA"在相同的解决方案该功能位于" Common"处理SSRS。并且在该函数中需要添加子报告路径。在Wcf服务方
Common cmn = new Common();
cmn.ProcRpt(t);
在Common ProcRpt()中:
viewerF.ProcessingMode = ProcessingMode.Local;
viewerF.LocalReport.ReportPath = System.Web.Hosting.HostingEnvironment.MapPath("~\\RDLC\\rptSub.rdlc");
viewerF.LocalReport.DataSources.Add(LoadDataSource(shfDeptID, StatementDate, "f"));
问题是运行wcf,子报告路径指向wcf文件夹ProjB的路径不是ProjA' s; 我应该如何使其达到原始路径" ProjA / RDLC / rptSub.rdlc"。感谢
答案 0 :(得分:0)
大约有1000种方法可以给这只猫上皮。发生这种情况的原因是因为这是您的程序/服务/网站运行的实际路径,因此使用相对路径,以便您将结果存储在应用程序当前运行的路径的子文件夹中
你可以尝试的第一件事是改变你的相对路径以适应你想要做的事情。使用几个点(..)应该允许你从你所在的文件夹上去,即:
"..\\ProjA\\RDLC\\rptSub.rdlc"
这可能是最“正确”的做法。您可以使用绝对路径,但是在Web应用程序和服务中都会产生安全隐患(因为在lex haxor中可能会对您的文件系统有所了解,如果他是/她想出了如何在服务器的目录中移动。
最后,您可以(虽然更多工作,但更干净)将您的二进制文件移动到bin文件夹并具有这些子报表的相对路径。在最终构建中将所有这些(二进制文件)放在一个地方并不是世界末日,并且从长远来看可能会缓解一些类似的问题。