我們有一個非常簡單的ASP.Net頁面,用於將文件上傳到我們的網絡服務器。該頁面沒有控件 - 客戶端使用它每晚自動向我們發送一個文件。ASP.Net用於文件上傳的頁面停止在日誌語句中間處理
有時,文件似乎沒有得到我們,但客戶報告,他們已經發送它。
我們在頁面上添加了一些日誌語句,並發現了一些很奇怪的東西。該頁面在日誌語句中間停止執行。沒有例外,就這樣死去。
這裏是後臺代碼:
protected void Page_Load(object sender, EventArgs e) {
try {
// record that request came in at all
log.Debug("Update Inventory page requested through HTTP {2} on {0} {1}", DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString(), IsPostBack ? "POST" : "GET");
// make sure directory exists
string basePath = Server.MapPath("~/admin/uploads/");
log.Debug("Saving to folder {0}", basePath);
if (!Directory.Exists(basePath)) {
log.Debug("Creating folder {0}", basePath);
Directory.CreateDirectory(basePath);
}
// generate a unique file name
string fileName = DateTime.Now.Ticks.ToString() + ".dat";
string path = basePath + fileName;
log.Debug("Filename to save is {0}", fileName);
// record initial bytes of stream/file
StreamReader reader = new StreamReader(stream);
string fileContents = reader.ReadToEnd();
log.Debug("File received by GET is " + fileContents.Length + " characters long and begins with: "
+ Environment.NewLine + fileContents.Substring(0, Math.Min(fileContents.Length, 1000)));
// write out file
File.WriteAllText(path, fileContents);
log.Debug("Update Inventory page processing finished.");
// trap for and record any and all exceptions
}
catch (Exception ex) {
log.Debug(ex);
}
}
處理似乎在輸出所述fileContents可變的長度和第一部分中的日誌語句的中間死。在進程失敗時發生的日誌記錄如下所示:
2010-08-02 02:46:01.7342|DEBUG|UpdateInventory|Update Inventory page requested through HTTP GET on 8/2/2010 2:46:01 AM
2010-08-02 02:46:01.7655|DEBUG|UpdateInventory|Saving to folder c:\hosting\sites\musicgoround.com\wwwroot\admin\uploads\
2010-08-02 02:46:01.7811|DEBUG|UpdateInventory|Filename to save is 634163139617811250.dat
2010-08-02 02:48:02.3905|DEBUG|UpdateInventory|
我真的不明白該怎麼做。
我假設在文件的傳輸中有一個錯誤,即從reader.ReadToEnd()行拋出異常。如果不是例外,我希望頁面處理能夠繼續,但我可能只接收部分文件(在這種情況下,它應該記錄一些內容)。
日誌記錄語句只訪問一個字符串變量,它在一個try-catch中。 NLog是我們使用的日誌記錄組件,我們可以通過Codeplex上簡單日誌門面項目提供的外觀訪問它。因此,我們相信日誌記錄組件或多或少是防彈的 - 我們當然沒有看到我們在這裏使用它會導致問題的任何東西。
那麼,這是怎麼回事?爲什麼這個頁面能夠在這個頁面上停止並停止這樣的處理?
事實上,我們得到一個半完成的日誌記錄語句似乎指向在日誌系統中吞噬了一個錯誤 - 但這似乎不太可能 - 而且我們有NLog的內部日誌記錄,它不報告任何問題。
哦,我的...你的回答促使我仔細檢查NLog配置文件,我們的服務器版本與我們的開發版本不匹配 - 具體來說,佈局不在那裏,默認情況下,NLog不包含異常詳細信息在日誌佈局中。多麼疏忽...... – 2010-08-02 16:14:26
他,大多數人在某個時候都有類似的問題。至少現在問題是有道理的;-) – 2010-08-02 16:35:24