在一个大方法调用周围添加一个try catch

时间:2012-01-22 14:57:47

标签: c# asp.net

我有一个非常简单的网络服务;像这样的东西:

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语句即使没有发生错误也会对性能产生影响吗?

感谢您的建议。

4 个答案:

答案 0 :(得分:3)

使用这样的try语句即使没有发生错误也会对性能产生影响吗?

没有

应用程序是否可以防范?

是。但是,如果onApplicationError中有Global.asax个事件,您将无法看到错误,因为您没有投放新错误。

但是我现在看到它的方式,你的代码是安全的例外。

答案 1 :(得分:2)

  

这是否会使服务和应用程序例外证明?

是的,似乎这是唯一可以引发异常的地方。因此,您将使用此try catch

捕获每个异常
  

而且,使用这样的try语句即使没有发生错误也会对性能产生影响吗?

不,在没有错误的情况下不会导致任何性能问题

另一方面,忽略这样的异常不是一个好习惯。可能是您可以向用户返回自定义错误,以便用户可以执行某些操作,而不仅仅是想知道我为什么要返回空字符串

答案 2 :(得分:1)

这是一种让应用程序“异常”的方法,是的,至少在客户看到时。但它不会使防错,并且只要您的客户端获得一个空字符串,它就会使更难找到错误。

如果您愿意接受吞咽异常并可能使您的应用程序处于未定义状态的风险,您可以至少返回异常信息作为结果,以便有人能够理解到底发生了什么。如果有意料之外的输入,您必须通知您的客户并自行记录错误。

  • 您的客户输入了无效的输入数据吗?你知道它是哪些数据,以及如何重复这个问题吗?
  • 有效数据发生了吗?它在哪里以及如何发生?

更好的解决方案是在Application_Error文件中添加Global.ashx处理程序方法,记录异常(可能会在发生这种情况时通过电子邮件通知管理员),并使用自定义错误用户页面。

本文解释得很好:Global Error Handling in ASP.NET

答案 3 :(得分:1)

是异常证明吗?是。会不会影响性能?而不是涉及此代码块的执行。但是,我建议你重写代码,以便它允许你处理异常并获得所需的结果:

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 "";                 
    }

}