部落格園找找看(http://zzk.cnblogs.com)的索引檔案佔用空間太大,需要移至另外一台伺服器,所以要解決“在ASP.NET中通過共用資料夾訪問索引檔案”的問題。
假設找找看的ASP.NET程式在A伺服器,索引檔案在B伺服器的ZzkIndex共用資料夾中,訪問地址是\\192.168.18.18\ZzkIndex\。要實現就是在A伺服器的ASP.NET程式中能讀寫共用資料夾\\192.168.18.18\ZzkIndex\中的檔案。
參考園子裡的 asp.net訪問網路映射盤的問題 文章,我們解決了這個問題,在這裡分享一下。
具體操作步驟:
(註:A伺服器為ASP.NET程式所在伺服器,B伺服器為共用資料夾所在伺服器)
- 在兩台伺服器上建立相同使用者名稱、相同密碼的Windows帳戶(A與B伺服器都要建),比如假設這裡使用者名稱是ZzkIndexer,密碼是zzk.cnblogs.com。
- 取消兩台伺服器上的ZzkIndexer帳戶的遠端控制(Remote Control)許可權(讓這個帳戶擁有儘可能少的許可權),如:
- 將B伺服器上的ZzkIndexer帳戶移出所有使用者組(包含Users),如:
不屬於任何使用者組?是的,不要懷疑,已經過實踐檢驗。
- 在B伺服器上建立共用資料夾ZzkIndex並給ZzkIndexer帳戶授予寫入權限,有兩個許可權需要設定,一個是檔案系統許可權,一個是共用許可權。
檔案系統使用權限設定如:共用使用權限設定如下:
- 在A伺服器的IIS中建立虛擬目錄指向B伺服器的共用資料夾,如:
點擊“確定”後,如果出現訪問拒絕(Access to the path '\\192.168.18.18\ZzkIndex' is denied.)的錯誤,不用管它。
- 在A伺服器的ASP.NET程式的web.config檔案中,添加帳戶類比設定:
<system.web>
<identity impersonate="true" userName="ZzkIndexer" password="zzk.cnblogs.com"/>
</system.web>
- 在A伺服器上,設定“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的檔案系統許可權,授予ZzkIndexer帳戶修改許可權(註:v4.0.30319為當前.NET Framework版本號碼)。 否則,運行時會出現錯誤:The current identity (ZzkIndexer) does not have write access to 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files'.
- 萬事具備,只欠測試!用一個簡單的test.aspx頁面測試一下,代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
System.IO.File.Create(Server.MapPath("/ZzkIndex/cnblogs.txt"));
}
</script>
訪問test.aspx之後,看B伺服器的ZzkIndex共用檔案中的內容:
搞定!
小結
“解決問題+寫部落格”花費的時間可能是“解決問題+不寫部落格”的兩倍,但寫出來之後,你再也不用擔心再次遇到這個問題,再也不會出現這樣的鬱悶:有人問我一個曾經解決過的問題,我卻忘了當時是怎麼解決的。