我有一個MVC應用程序,它在本地運行良好,它在Azure網站上運行良好。但是,當部署爲雲服務時,訪問拒絕訪問某些xml文件的問題。Windows Azure雲服務 - 訪問已部署的xml文件被拒絕
這些XML文件只是應用程序所需的數據位,有助於確定應用程序中的某些設置。
在分層文件夾結構下有很多這樣的想法,因爲它們的每一個都經過處理以允許我在應用程序中繼承這些設置。 但是,無論如何,這在一天結束時基本上是不相關的,這些只是存儲在web根目錄下的文件夾中的xml文件。
將xml文件的生成操作屬性設置爲內容,以便它們可以通過發佈進行部署。事實上,我已將RDP加入雲服務虛擬機中,只是爲了檢查xml文件正在部署並可以確認它們。
但是,每當應用程序試圖讀取這些文件之一,我會得到以下訪問被拒絕的錯誤。
訪問路徑'E:\ sitesroot \ 0 \ Templates \ Applications \ ControlProperties.xml'被拒絕。
(注:這是不是假設由下面的答案硬編碼的路徑,我用我HttpContext.Current.Server.MapPath來確定相對該文件的物理路徑Web根)
這只是標準訪問被拒絕錯誤,表明應用程序無權讀取文件。
現在,如果我再次將RDP發送到機器並授予每個人對此特定文件的完全訪問權限(僅用於診斷目的!),那麼應用程序工作正常,不會引發錯誤。所以這證明它確實是一個訪問問題。
問題是,這些只是簡單的xml文件與項目部署,我真的不想在每個部署上設置文件權限。這只是錯誤的。
所以我想了解爲什麼作爲標準部署的一部分,雲服務無法訪問這些部署的XML文件,然後對合適的解決方案感興趣。即某些權限設置可能會隨解決方案一起部署,或者可能有更好的替代方法解決此問題。
就我用來讀取xml文件的代碼而言,我只是使用XmlSerializer將文件內容反序列化爲對象。 (如下)
public static T Deserialise(string settingsFile)
{
using (var fs = new FileStream(settingsFile, FileMode.Open))
{
var sr = new XmlSerializer(typeof (T));
var obj = (T) sr.Deserialize(fs);
fs.Close();
return obj;
}
}
據我所知,沒有用於Web角色的本地存儲,這將是罰款對我來說,如果我想能夠讀取和寫入存儲爲我的應用程序的一部分使用。但實質上這些是需要與應用程序一起部署的配置設置文件。
如果他們的配置,你爲什麼不使用web.config文件? – mattytommo 2013-04-25 09:35:15
因爲它們不適合在Web配置中存儲。因爲它們有一個嵌套的層次結構,最終可能會有數百個這樣的結果。加上德從web配置耦合它們可以讓我在未來更靈活,因爲我們可能開始更新應用程序本身這些文件,如果我們允許用戶修改這些模板設置。 – Kramer00 2013-04-25 10:42:56