cho*_*obo 1 c# error-handling web-services elmah exception
我用Elmah记录异常,并想知道我使用的技术是不是很好的设计?
现在我捕获并重新抛出各种类和方法中出现的异常,并将它们记录到程序的主try-catch块中的Elmah.
//主程序
try
{
// Some code that fires off other classes, etc...
MyTestClass myTestClass = new MyTestClass();
myTestClass.Execute();
}
catch(Exception ex)
{
ErrorSignal.FromCurrentContext().Raise(ex);
}
Run Code Online (Sandbox Code Playgroud)
// MyTestClass
public class MyTestClass
{
public object ApiResult { get; set; }
public string Execute()
{
try
{
// execute some code
// ....
// set xml message
ApiResult = "User information xml response";
}
catch (Exception ex)
{
// set xml message
ApiResult = "something went wrong xml error response...";
throw;
}
}
}
Run Code Online (Sandbox Code Playgroud)
将异常记录在哪里会更好吗?另一个问题,我应该记录我可以处理的错误而不会捕获异常吗?例如,如果某些内容为null,我应该对其进行测试(如果为null ...)并在Elmah中记录消息吗?
ErrorSignal您应该尝试让ELMAH自动记录错误,而不是手动记录使用Elmah 类的错误,这会在Error引发应用程序事件时发生.
在您的示例中,主程序存在严重问题.也就是说,至少对最终用户来说,它正在吞噬异常.是的,异常是在ELMAH中记录,但是您正在隐藏用户的错误.最终用户会认为她的表单提交(或其他)没有错误,但实际上存在严重问题.
简而言之,try...catch只应谨慎使用块,例如在您可以从错误中恢复或错误是"次要"错误的情况下,并且不应该停止工作流程.但是大多数错误都是真正的阻止,并没有优雅的解决方法.对于大多数人,您希望让错误渗透到ASP.NET运行时,ELMAH将自动将其记录在该运行时,并且用户将看到错误页面,并提醒他们发生错误.
查看我的这篇文章:ASP.NET Web应用程序的异常处理建议.
| 归档时间: |
|
| 查看次数: |
3356 次 |
| 最近记录: |