2008-10-24 54 views
3

我有一個使用.net c#的web服務,我想寫入服務器上的文本文件,但是我無法讓它工作。我相信這是一個許可問題。我想問題是我正在使用System.IO.Directory.GetCurrentDirectory()從webservices寫一個文件

有沒有更好的選擇?

+0

PLease提供了代碼的簡化示例。 – 2008-10-24 14:13:40

+0

需要更多的信息,我認爲。從你的描述來看,這個問題實際上可能是任何事情。 – TheSmurf 2008-10-24 14:13:58

回答

9

嘗試授予ASP.NET用戶(或任何以IIS身份運行的帳戶)權限以寫入您嘗試寫入的文件夾。

如果這是網絡共享,請嘗試以寫入共享的域用戶身份運行IIS。

請記住授予最小權限的原則(不要使用管理員級別訪問權限)。

0

您應該可以從Web服務寫入文件。這很可能是一個權限或信任問題。如果您處於有限信任(即中等信任),請確保您正在寫入到您的Web根目錄下的修補程序。如果您已經這麼做,或者處於完全信任環境中,請檢查以確保該目錄具有IIS工作進程寫入的權限。

2

如果您在Windows 2003上運行,並且尚未啓用,則會啓用ASP.NET模擬,並且正在DefaultAppPool或配置爲以「網絡服務」身份運行的應用程序池中運行應用程序。 ,那麼您需要將「網絡服務」帳戶寫入權限授予目標文件夾。如果您在使用「網絡服務」以外的身份的應用程序池中運行該網站,則該帳戶可能需要對目標文件夾的寫入權限。

如果您運行的是Windows 2000,那麼'<MACHINENAME>\ASPNET'帳戶將需要對目標文件夾的寫入權限。

如果您已經啓用了模擬,那麼您需要賦予站點的匿名用戶帳戶對目標文件夾的寫入權限。

要檢查模擬是否打開,請打開(假設爲ASP.NET 2.0),然後檢查您的machine.config文件(C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG)以查看您是否擁有以下設置:

<identity impersonate="true"/> 

這也可以在應用程序的web.config中重寫。

此外,如果您在部分信任環境中運行,那麼您可能只能寫入網站的應用程序文件夾,因爲默認的FileIOPermission通常設置爲$ AppDir $,即無法在任何地方修改文件否則,即使使用正確的NTFS權限。

如果您正在寫入網絡共享,則StingyJack已爲您解答,但部分信任環境注意事項仍適用。

但首先檢查您的NTFS燙髮,這可能是最好的選擇。

希望這有助於 千電子伏

2

斯圖爾特,而不是使用System.IO.Directory.GetCurrentDirectory(),您可能需要使用使用Server.Mappath。你可以給服務器。MapPath相對於您要保存文件的Web服務位置的目錄,否則可能需要傳遞完整的文件路徑「C:\ Files \ file.txt」。至於權限問題,我通常可以通過添加對我爲IIS_WPG和ASPNET用戶(這些用戶名可能與您的服務器不同)的文件夾寫入權限來解決此問題。

2

如果您不指定目標文件夾,我假設您的Web服務想要寫入「C:\ Windows \ System32 \」或類似的東西。這就是爲什麼UnauthorizedAccessException會在服務器上拋出。爲了寫入Web服務的「home」目錄,你必須找出第一個地方。

以下適用於我,但您也可以找到其他建議here

通過調用添加引用System.Web程序,並獲得當前目錄:

strFileDestination = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + strFileName; 

記得給在IIS服務寫入權限。