抛出FormatException的Elmah.ErrorMailModule.ReportError错误,它会循环使用w3wp进程

时间:2013-08-19 12:29:09

标签: asp.net-mvc elmah elmah.mvc

最近,我注意到IIS中的Web应用程序正在随机重启,有时每20分钟重启一次。我检查了事件日志,发现了以下各种错误:

  • 级别:错误
  • 资料来源:.Net Runtime
  • EventID:1026

以下是例外情况:

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.FormatException
Stack:
   at System.Text.StringBuilder.AppendFormat(System.IFormatProvider, System.String, System.Object[])
   at System.String.Format(System.IFormatProvider, System.String, System.Object[])
   at Elmah.ErrorMailModule.ReportError(Elmah.Error)
   at Elmah.ErrorMailModule.ReportError(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

我正在使用最新稳定版的Elmah(1.2.2)。以下是web.config中的<elmah>配置节点

<elmah>
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/errors/" />
    <security allowRemoteAccess="1" />
    <errorMail from="errors.visitgozo@casasoft-dev.com" to="errors@casasoft-dev" subject="{Error_Encountered} [Visit Gozo]" 
               async="true" smtpPort="25" smtpServer="mail.casasoft.com.mt" userName="errors@casasoft-automailer" password="RvjyBiyvePVVpcLBNgJ6" />

</elmah>

我将其设置为以async-mode(async =“true”)发送此类电子邮件。如果这些是在后台线程上生成的,并且在backgroung线程上发生错误,据我所知,该进程已终止。

任何想法可以做些什么?

我正在使用IIS7和ASP.Net MVC 4。

1 个答案:

答案 0 :(得分:0)

我在与ELMAH相关的Google Code上提出issue,我得到了其中一位开发者的回复。

基本上,似乎电子邮件主题在Elmah内部使用string.Format()格式化,错误消息为{0},错误类型为{1}。在我的例子中,我在设置中指定的主题是:

{Error Encountered} Website_Name

{}触发FormatException,因此出现问题。通过用圆括号替换它们很容易解决,因为我不需要花括号。人们可以通过{{}}来逃避它们,但就我而言,这是不必要的。