【问题标题】:wcf client mappathwcf 客户端映射路径
【发布时间】:2013-01-04 15:44:43
【问题描述】:

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”。谢谢

【问题讨论】:

    标签: wcf ssrs-2008 relative-path


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢。问题是我收到错误“此处不允许使用相对虚拟路径 '../ProjA/RDLC/rptFleetwP.rdlc'。”
    • 有趣...您的托管环境是什么,ReportPath 是什么类型的对象(字符串、目录等)
    • asp.net 4.0; ReportViewer.LocalReport.ReportPath 应该是一个字符串;有什么想法吗?
    • 可能听起来很疯狂,但试试这个:HostingEnvironment.MapPath(VirtualPathUtility.ToAbsolute("../ProjA/RDLC/rptSub.rdlc"))
    • 如果您收到 HttpException 异常,那么您正在运行应用程序的用户在运行时无权进入父文件夹,这是一项安全功能。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    相关资源
    最近更新 更多