在大型方法调用周围添加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-catch

即使没有发生错误,使用这样的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 "";                 
    }

}