如何将异常冒泡到我的UI?

时间:2010-08-05 15:15:06

标签: c# asp.net exception exception-handling try-catch

我有一个aspx页面,在按下按钮时,会创建一个serviceRefernece对象的实例。在我的页面背后的代码中,我将调用包装在try / catch中。

        try
        {
            var client = GetClient();
            var request = new ActiveVerificationRequestDC();
            var response = client.GetActiveVerification(request);
            DoSomethingWithTheResponse(response);      

        }
        catch (FaultException ex)
        {
            LogError(ex, MethodBase.GetCurrentMethod().Name);
            throw;

        }
        catch (Exception ex)
        {
            var args = new[] { MethodBase.GetCurrentMethod().Name, ex.Message };
            DisplayError(args);
        }

引用的svc文件使用的模式几乎相同。它通过net.tcp调用内部客户端。该调用包含在try / catch

        try
        {
            var client = new InternalServiceClient();
            var response = client.GetActiveVerification(request);
            client.Close();
            return response;

        }
        catch (FaultException fe)
        {
            LogError(MethodBase.GetCurrentMethod().Name, fe);
            throw; 
        }

这是我的问题,如何在此处获取错误以冒泡到我的UI catch语句?当我这样离开时,我从visual studio得到一个未处理的异常错误。我已经尝试删除throw,这使我指定了返回值,并返回null。这使得UI无法正常工作。我已经尝试了throw new Exception(fe.message),我对未处理的异常也遇到了同样的问题。基本上我的问题是如何才能完成我需要的东西?我错过了什么?

4 个答案:

答案 0 :(得分:1)

你的try / catch块周围需要一个单独的try / catch块。你有它会捕获FaultException和任何类型的Exception,但是你的异常块不会从FaultException中捕获你的抛出。因此,只需将其与另一个try / catch包含在一起,或者在FaultException catch和Exception catch中处理它。

答案 1 :(得分:0)

原因可能是在第二个不属于FaultException类型的代码段中引发了另一个异常;在这种情况下,这样的例外将通过未处理。也许您应该在第二个代码段中添加另一个catch块,以捕获Exception类型的异常:

    catch (FaultException fe)
    {
        LogError(MethodBase.GetCurrentMethod().Name, fe);
        throw; 
    }

    catch (Exception ex)
    {
        throw;
    }

答案 2 :(得分:0)

FaultException您是否正在重新投掷通用类型?任何FaultContract属性详细说明的相关类是否可供此执行堆栈中的所有程序集访问?

修改:在您的第一个代码段中

   catch (FaultException ex)
    {
        LogError(ex, MethodBase.GetCurrentMethod().Name);
        throw;
    }

如果此处理程序的throw语句出现未处理的错误,则@MCain是正确的。

答案 3 :(得分:-2)

我相信你必须抛出阻止错误才能冒出来

try
{
}
catch (SqlException _SqlException)
{
  //Log Error to file
  throw;
}
catch (IOException _IOexception)
{
  //Log Error to file
  throw;
}
catch (Exception _exception)
{
  //Log Error to file
  throw;
}

这种块将在调用方法