2011-01-11 58 views
2

我最近在我正在處理的網站上設置了Elmah。實際的日誌記錄和elmah視圖頁面在我的本地和活動服務器上均可用。 Elmah電子郵件發送正在我的本地工作,但不在現場服務器上。我做了一些四處尋找,找不到任何解決方案,但我找到了一個帖子,其中有人建議在Global.asax中添加一些代碼,讓elmah事件登錄到文件以嘗試和調試它。下面這個建議我創建了一個Global.asax文件(該網站以前沒有之一),並添加以下代碼:Elmah電子郵件發送和File.AppendText不在現場服務器上工作

protected void ErrorMail_Mailing(object sender, ErrorMailEventArgs e) 
    { 
     string tos = (e.Mail.To.Count != 0) ? string.Join(",", e.Mail.To.ToList().Select(x => x.ToString()).ToArray()) : string.Empty; 
     string msg = string.Format("Sending mail to {0}. ", tos); 
     string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt"); 
     StreamWriter file = File.AppendText(filename); 
     file.WriteLine(msg); 
     file.Close(); 
    } 
    protected void ErrorMail_Mailed(object sender, ErrorMailEventArgs e) 
    { 
     string tos = (e.Mail.To.Count != 0) ? string.Join(",", e.Mail.To.ToList().Select(x => x.ToString()).ToArray()) : string.Empty; 
     string msg = string.Format("Sent mail to {0}. ", tos); 
     string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt"); 
     StreamWriter file = File.AppendText(filename); 
     file.WriteLine(msg); 
     file.Close(); 
    } 
    protected void Session_Start(object sender, EventArgs e) 
    { 
     string msg = "Session started"; 
     string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt"); 
     StreamWriter file = File.AppendText(filename); 
     file.WriteLine(msg); 
     file.Close(); 
    } 
    protected void Application_Error(object sender, EventArgs e) 
    { 
     string msg = "An error occured"; 
     string filename = HostingEnvironment.MapPath("~/UploadedFiles/0/ElmahMailLog.txt"); 
     StreamWriter file = File.AppendText(filename); 
     file.WriteLine(msg); 
     file.Close(); 
    } 

然後我去了一個不存在生成一個404錯誤頁面,我的文本文件我的本地機器,因此本上:

Session started 
An error occured 
Sending mail to [email protected] 
Sent mail to [email protected] 

另外從我的本地機器觸發時,我收到了錯誤的電子郵件。當我將此代碼移到演示網站(在實時網絡服務器上)時,雖然日誌文件爲空,並且電子郵件未發送。雖然這個錯誤會記錄到Elmah數據庫中。

我能想到的唯一的事情就是IIS設置一定不正確。任何人都可以想到一個設置,防止elmah發送電子郵件(但不是我的應用程序的其他部分)和/或將阻止寫入文件?僅供參考,該網站確實有文件上傳,工作得很好。

我真的很茫然,至於什麼會導致這些問題。任何答案或想法調試將不勝感激。讓我知道你是否需要澄清任何事情。

編輯:它看起來像我的Global.asax文件只是沒有做任何事情。就像事件沒有因某種原因而被召喚一樣。即使是asp.net事件。

+0

您確定活動服務器上的SMTP設置是否正確,並且您指定的SMTP服務器允許向您配置ELMAH的用戶發送郵件給誰?如果您創建了一個測試頁面,您可以使用相同的SMTP設置編寫代碼以發送電子郵件到該電子郵件地址,這是否工作? – 2011-01-12 03:56:13

+0

網站上已經有使用我們的Gmail SMTP發送電子郵件的頁面。另外我知道它的作品,因爲當本地運行代碼的電子郵件發送。它只能在服務器上發送失敗。 – William 2011-01-12 16:42:54

回答

0

您是否在本地和生產環境中使用了不同的web.config文件?我通常會發現,如果我的本地工作正常,但我的生活不是那麼我的配置是錯誤的。如果現場網站成功發送非ELMAH電子郵件,那麼我建議它是實時web.config中的ELMAH配置。

如果您使用IIS6,請檢查是否已將相關密鑰添加到配置的部分。

另外,如果您在運行的服務器上運行IIS7,則需要將ELMAH密鑰添加到web.config文件的system.webServer/modules部分。