2011-12-28 119 views
2

我在我的應用程序中使用WCF服務。所有服務都作爲窗口服務託管。我在IIS中有一個虛擬目錄來保存用戶文件(可能是PDF或TXT)。我想爲每個用戶創建一個特定的文件夾,並將他們的信息文件保存在該文件夾中。我如何創建一個文件夾並通過WCF將文件上傳到IIS?從WCF將文件保存到IIS虛擬目錄?

例如:虛擬目錄路徑是http://10.10.10.1/TempUserFolder/

我想爲UserID = 1http://10.10.10.1/TempFolder/UserID1/創建一個文件夾。 然後將他的信息文件保存到該文件夾​​中,http://10.10.10.1/TempFolder/UserID1/Info.pdf

當我使用System.IO時,收到錯誤消息URI formats are not supported。請以正確的方式指導我。我非常感謝你的幫助。我使用VS200

+0

你的帖子有些矛盾。您聲明您的服務託管爲Windows服務,但您指的是IIS虛擬目錄。如果您的服務確實作爲Windows服務託管,那麼您爲什麼要嘗試使用IIS虛擬目錄?代碼是什麼造成這些錯誤? – 2011-12-28 04:38:14

+0

@Chong如果你得到這個解決方案,你會分享代碼或鏈接,我可以得到答案的行爲,我不明白Brijesh告訴的方式。 所以請幫助,如果你可以我卡在相同的情況下,並在我的情況下使用webHttpBinding .. 在此先感謝... – 2012-10-02 11:16:05

回答

2

如果您的Windows服務是相同的IIS主機服務器上,可以很好地使用絕對路徑,比如說如果http://10.10.10.1/TempFolder/映射到c:/ TempFolder /,在WCF windowsservice接收文件時在c:/ TempFolder /中創建新文件夾並在那裏存儲文件,如果它在不同的機器上可以創建網絡共享和然後創建文件夾並將文件複製到該位置。

你可以找到許多網站文章來說明如何通過WCF

http://stefanoricciardi.com/2009/08/28/file-transfer-with-wcp/

0

要獲得物理目錄名稱,使用

Server.MapPath('TempFolder/UserID1'); 

更新

正如在評論中指出,上述方案將只使用asp.net兼容工作時一個IIS託管的解決方案。

如果您不想對目錄進行硬編碼,例如,如果將其部署到不同的服務器上,則可以獲取WCF程序集的目錄,然後找出所需目錄的相對關係。

例如,假設DLL是在bin目錄和臨時目錄是1點了,下面的代碼應該工作:

string sDirectory = System.Reflection.Assembly.GetExecutingAssembly.Location; 
sDirectory = System.IO.Path.Combine(sDirectory, "..\TempFolder\UserID1"); 
+0

嗨Competent_tech, 謝謝你的答案。你可以給我一些例子嗎?我不知道如何在wcf應用程序中使用它。我已經嘗試了HttpContext.Current.Server.MapPath(「TempFolder」),但它總是返回null。我認爲它只能在基於Web的應用程序中使用。 – Chong 2011-12-28 04:34:15

+2

只有在IIS和ASP中託管時才能工作。網絡兼容性模式啓用 – 2011-12-28 04:35:13

+0

@ chris.house.00:優點。我習慣於組合WCF/Web應用程序解決方案。我已經用不同的解決方案更新了答案。感謝銳利的眼睛。 – 2011-12-28 09:34:24

0

這會給當前application.With的虛擬目錄,這個你可以添加你創建的文件夾名稱

上傳文件
public string GetIISPath() 
    { 
     string urlscheme = System.Web.HttpContext.Current.Request.Url.Scheme; 
     string host = System.Web.HttpContext.Current.Request.Url.Host; 
     int port = System.Web.HttpContext.Current.Request.Url.Port;   

     //Ignore Http Port 
     if (port != 80) 
      host = host + ":" + port; 
     string vPath = urlscheme + "://" + host + "/"; 
     return vPath; 
    }