2013-01-04 177 views
1

WCF服務「ProjB」需要調用一個函數「ProcRpt(字符串日期)」在同一個解決方案的另一個凸出「ProjA」。該功能位於處理SSRS的「Common」類中。並且在該功能中需要添加子報表路徑。在WCF服務端WCF客戶端的MapPath

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」。由於

回答

0

大約有1000多種皮膚在這一個貓。發生這種情況的原因是因爲這是運行程序/服務/網站的實際路徑,因此使用相對路徑以便在當前運行的應用程序的路徑的子文件夾中生成結果。

你可以嘗試的第一件事是改變你的相對路徑來適應你正在嘗試做的。使用幾個點(..)應該讓你你在哪裏,即:

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

這可能是最「正確」的方式做到這一點上去,從一個文件夾。您可以使用絕對路徑,但也有安全隱患這樣做,在這兩種Web應用程序和服務(如在萊特haxor則可能知道一些關於你的文件系統,如果他/她想出如何這將是壞在你的服務器的目錄中移動

最後,你可以(儘管更多的工作,但更清潔)將你的二進制文件移動到一個bin文件夾,並有相對路徑到這些子報告。最終構建一個地方是不是世界的盡頭,並且可能會緩解一些類似的問題,從長遠來看。

+0

多謝了。問題是我得到錯誤信息「相對虛擬路徑」 ../ProjA/ RDLC/rptFleetwP.rdlc'在這裏是不允許的。「 –

+0

有趣的是什麼是你的主機環境和什麼樣的對象是ReportPath(字符串,目錄等) – iMortalitySX

+0

asp.net 4.0; ReportViewer.LocalReport.ReportPath應該是一個字符串;任何想法? –