1

WCF 服务“ProjB”需要在同一解决方案中的另一个项目“ProjA”中调用函数“ProcRpt(string Date)”。该函数位于处理 SSRS 的“Common”类中。并且在该函数中需要添加子报告路径。在 Wcf 服务端

Common cmn = new Common();
cmn.ProcRpt(t);

在通用 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的;我应该如何使它回到它的原始路径“ProjA/RDLC/rptSub.rdlc”。谢谢

4

1 回答 1

0

有大约 1000 种方法可以给猫剥皮。发生这种情况的原因是因为这是您的程序/服务/网站运行的实际路径,因此使用相对路径会导致应用程序当前运行的路径的子文件夹.

您可以尝试的第一件事是更改您的相对路径以适应您正在尝试做的事情。使用几个点 (..) 应该可以让您从您所在的位置上一个文件夹,即:

"..\\ProjA\\RDLC\\rptSub.rdlc"

这可能是最“正确”的方法。您可以使用绝对路径,但这样做会带来安全隐患,在 Web 应用程序和服务中(因为在 leet haxor 中可能会知道有关您的文件系统的一些信息,如果他/她知道如何移动,那将是不好的在您的服务器的目录中。

最后,您可以(虽然工作量更大,但更简洁)将二进制文件移动到 bin 文件夹中,并拥有这些子报表的相对路径。在最终构建中将所有这些(二进制文件)放在一个地方并不是世界末日,从长远来看可能会缓解一些类似的问题。

于 2013-01-04T16:08:25.417 回答