Thursday, May 26, 2011

將 ASP.NET 網站部署在 UNC 路徑上最重要的步驟

如果要將 ASP.NET 網站安裝在遠端的 UNC 路徑上,在設定 IIS 時除了一般檔案的存取權限外,最重要的就是 ASP.NET 的執行權限是否有正確設定,由於所有置於 UNC 路徑上的 .NET 應用程式都會預設套用 LocalIntranet 群組,所以你無法將 ASP.NET 佈署在 UNC 路徑上,除非自行新增 .NET 安全性原則。
在沒設定 .NET 安全性群組之前,不管你怎麼設定都會出現以下安全性例外狀況的錯誤訊息:
安全性例外狀況 :: 例外詳細資訊: System.Security.SecurityException: 型別 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的使用權限要求失敗。
SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′ failed

解決此問題的步驟如下:
1. [開始] / [執行] / 輸入 cmd 並按下 Enter
2. 進入 .Net Framework 的安裝目錄(注意:x86 架構與 x64 架構的目錄並不相同)
    如果是 x64 架構請進入 C:\Windows\Microsoft.NET\Framework64\v2.0.50727
    如果是 x86 架構請進入 C:\Windows\Microsoft.NET\Framework\v2.0.50727
    注意: 如果進入錯誤的路徑,怎麼設定還是無法使用,這取決於你的 .NET 應用程式是跑什麼架構!
3. 執行 CASPOL.exe 工具授權特定 UNC 路徑為「完全信任」,請參考以下指令
caspol -m -ag 1. -url "file://\\server\share\*" FullTrust -exclusive on
  接著畫面會問你是否確認要執行這個動作,它會要你輸入 yes 或 no,但你只能輸入 yn 喔!( 按 y )
  
  我們可以透過 caspol -listgroups 指令驗證此安全性原則是否設定成功:
 
4. 最後去設定 IIS ( IIS6 或 IIS 7 ),如果先前已經設定好請務必記得「回收應用程式集區」才能讓生效!

其他補充說明:
1. 如果你不小心新增了兩個重複的 UNC 路徑到 .NET 安全性原則中會造成 ASP.NET 無法執行
   錯誤訊息是: 不允許一個以上的獨佔群組。More than one exclusive group is not allowed.
   System.Security.Policy.PolicyException: 不允許一個以上的獨佔群組。
2. 如果 CASPOL.exe 本身在執行的時候會引發例外(Exception),那可能要重新開機才能解決此問題!
3. 若要移除先前設定的安全性原則,可以參考以下指令:
caspol -rg 1.6
注意:所有 .NET 安全性原則都有個編號,記得先用 caspol -listgroups 列出所有群組,並找出你之前新增的安全性原則編號,然後才能帶入指令中。


source: http://blog.miniasp.com/post/2010/02/28/Setup-aspnet-website-on-remote-UNC-Path.aspx

No comments: