2011-01-11 68 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部分。

相关问题