如果要將 ASP.NET 網站安裝在遠端的 UNC 路徑上,在設定 IIS 時除了一般檔案的存取權限外,最重要的就是 ASP.NET 的執行權限是否有正確設定,由於所有置於 UNC 路徑上的 .NET 應用程式都會預設套用 LocalIntranet 群組,所以你無法將 ASP.NET 佈署在 UNC 路徑上,除非自行新增 .NET 安全性原則。
在沒設定 .NET 安全性群組之前,不管你怎麼設定都會出現以下安全性例外狀況的錯誤訊息:
解決此問題的步驟如下:
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,但你只能輸入 y 或 n 喔!( 按 y )
我們可以透過 caspol -listgroups 指令驗證此安全性原則是否設定成功:
4. 最後去設定 IIS ( IIS6 或 IIS 7 ),如果先前已經設定好請務必記得「回收應用程式集區」才能讓生效!
其他補充說明:
1. 如果你不小心新增了兩個重複的 UNC 路徑到 .NET 安全性原則中會造成 ASP.NET 無法執行
錯誤訊息是: 不允許一個以上的獨佔群組。 或 More than one exclusive group is not allowed.
2. 如果 CASPOL.exe 本身在執行的時候會引發例外(Exception),那可能要重新開機才能解決此問題!
3. 若要移除先前設定的安全性原則,可以參考以下指令:
注意:所有 .NET 安全性原則都有個編號,記得先用 caspol -listgroups 列出所有群組,並找出你之前新增的安全性原則編號,然後才能帶入指令中。
相關連結