在大型方法调用周围添加try-catch
本文关键字:添加 try-catch 周围 调用 大型 方法 | 更新日期: 2023-09-27 18:21:08
我有一个非常简单的web服务;像这样的东西:
public class LeadService : System.Web.Services.WebService {
[WebMethod(EnableSession = true)]
public string MyService(string TheIncomingData)
{
string ReturnData = "";
MyClass TheClass = new MyClass();
ReturnData = TheClass.MyMethod(TheIncomingData);
return ReturnData;
}
}
您可能已经猜到了,MyMethod是一个相当长时间运行的方法,(目前)存在一些错误空间。如果我在方法调用周围添加一个try/catch语句,如下所示:
try { ReturnData = TheClass.MyMethod(TheIncomingData); }
catch { ReturnData = ""; }
这会让服务和应用程序成为例外吗?而且,即使没有出现错误,使用这样的try语句是否会对性能产生任何影响?
谢谢你的建议。
即使没有发生错误,使用这样的try
语句是否会对性能产生任何影响?
没有。
应用程序是否有例外证明?
是的。但是,如果您在Global.asax
中有onApplicationError
事件,您将无法看到错误,因为您没有抛出新的错误。
但在我目前看来,您的代码是安全的,不会出现异常。
这会让服务和应用程序成为例外吗?
是的,这似乎是唯一可以引发异常的地方。因此,您将使用这个try-catch 捕获每个异常
而且,即使没有出现错误,使用这样的try语句是否会对性能产生任何影响?
不,在没有错误的情况下,它不会引起任何性能问题
顺便说一句,忽视这样的例外情况不是一个好的做法。也许你可以向用户返回一个自定义的错误,这样用户就可以做一些事情,而不仅仅是想知道为什么我会返回一个空字符串
这是一种使应用程序"防异常"的方法,是的,至少在客户端看到时是这样。但它不会使其具有防错性,而且每当客户端收到空字符串时,它会使更难找到错误。
如果您愿意承担吞下异常并可能使应用程序处于未定义状态的风险,则可以至少返回异常信息作为结果,以便有人能够了解实际发生了什么。如果出现意外输入,您必须通知客户并自行记录错误。
- 您的客户端是否输入了无效的输入数据?你知道是哪些数据吗?如何重复这个问题
- 这是在有效数据的情况下发生的吗?它是在哪里发生的,是如何发生的
更好的解决方案是在Global.ashx
文件中添加Application_Error
处理程序方法,记录异常(发生这种情况时可能会通过电子邮件通知管理员),并为用户使用自定义错误页面。
这篇文章很好地解释了它:ASP.NET中的全局错误处理。
它是异常证明吗?对这会影响表现吗?就这个代码块的执行而言并不是这样。然而,我建议您重写代码,这样它就可以处理异常并获得所需的结果:
public class LeadService : System.Web.Services.WebService {
[WebMethod(EnableSession = true)]
public string MyService(string TheIncomingData)
{
MyClass TheClass = new MyClass();
try{
return TheClass.MyMethod(TheIncomingData);
}
catch(Exception ex){
//handle your exception, log, etc.
}
return "";
}
}