微軟ASP.NET站點部署指南(6):設置文件夾權限
2011-11-28 12:29 湯姆大叔 閱讀(6834) 評論(0) 收藏 舉報1. 綜述
當你使用Visual Studio的Visual Studio Development Server (Cassini)進行測試的時候,程序是運行在你的系統登陸賬戶授權之下的,一般情況都是用administrator賬戶,這樣它就有了全部的權限來做任何事情了。但當程序運行在IIS上的時候,他的授權是該站點的應用程序池所設置的賬戶,默認情況下這種賬戶只有讀取和執行的權限,而沒用寫權限。
程序一般都需要上傳或更新文件的功能,這就成了問題,例如,在Contoso University程序里,系統出錯的時候Elmah會在Elmah目錄下創建XML格式的日志文件。 即便不使用像Elmah這樣的工具,你的站點也可能需要讓用戶上傳頭像啥的。
本章節,我們測試結果是,剛開始之前寫不了日志,設置寫權限以后,再測試就可以正常寫入文件了。
提醒:如果根據本章節所做的操作出現錯誤信息或一些功能不正常的話,請務必check Troubleshooting頁面。
2. 測試錯誤日志記錄和報表功能
驗證程序在IIS是否能正常工作(盡管在VS里是沒問題的),你可以模擬的一個錯誤,然后打開Elmah錯誤日志,查看是否正確記錄錯誤信息,如果沒用正常創建XML日志的話,它將顯示空的報告頁面。
打開瀏覽器訪問http://localhost/ContosoUniversity,輸入一個非法的URL地址,這樣系統就會產生一個黃頁錯誤(因為Web.config里錯誤信息配置的是"RemoteOnly"而你是在本機IIS上運行,所以不是顯示自定義頁面GenericErrorPage.aspx):

現在打開Elmah.axd來查看錯誤報告,使用管理員賬戶("admin"/ "Pas$w0rd")登錄以后,你將看到一個空記錄的頁面:

沒用任何錯誤報告,那是因為Elmah沒用在Elmah文件夾成功創建XML日志文件。
3. 設置Elmah目錄的寫權限
設置文件夾權限,你可以手工設置,也可以通過部署流程里自動化設置。使用自動化設置的話需要十分復雜的MSBuild代碼,鑒于這個事情只是在第一次部署的時候做,所以本章節只是展示如果手工來賦權限。(關于自動化設置權限的信息,你可以訪問:Setting Folder Permissions on Web Publish。)
打開資源管理器,找到你程序部署的目錄C:\inetpub\wwwroot\ContosoUniversity,右鍵Elmah文件夾,選擇屬性-安裝選項卡:

(如果在組或用戶名Group or user names看不到DefaultAppPool,你可能需要在你的機器上為IIS和ASP.NET4設置一個賬戶,本章節你要找的賬戶就是Contoso University程序所用的應用程序池用到的賬戶,然后添加進來并賦予寫權限。關于應用程序池認證的信息,可以查看頁面底部的連接。)
點擊編輯Edit,在Permissions for Elmah對話框里選擇DefaultAppPool,然后在允許列(Allow)選擇Write check box。

點擊確認關閉對話框。
4. 重新測試錯誤日志記錄和報表功能
用同樣的方式(訪問非法URL地址)模擬一個錯誤,然后打開錯誤日志頁面,這時候可以發現錯誤日志已經顯示在頁面上了。

像SQL Compact 數據庫更新一樣,也需要App_Data文件夾的寫權限,不過,因為部署流程會自動給App_Data設置寫權限,所以我們不需要手工去做額外的工作了。
現在,你已經完成了在本機IIS上運行Contoso University 程序所需要的必要工作了。下一章節我們將把程序部署到主機提供商的生產環境上,讓程序可以公開訪問。
5. 更多信息
這個例子里,Elmah不能保存日志的原因很容易發現,可以通過跟蹤IIS就能知道。具體信息請查看:Troubleshooting Failed Requests Using Tracing in IIS 7。
如果給應用程序池身份賦權,請訪問:Application Pool Identities和Secure Content in IIS Through File System ACLs。
當你使用Visual Studio的Visual Studio Development Server (Cassini)進行測試的時候,程序是運行在你的系統登陸賬戶授權之下的,一般情況都是用administrator賬戶,這樣它就有了全部的權限來做任何事情了。但當程序運行在IIS上的時候,他的授權是該站點的應用程序池所設置的賬戶,默認情況下這種賬戶只有讀取和執行的權限,而沒用寫權限。
浙公網安備 33010602011771號