我有一个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)
,我对未处理的异常也遇到了同样的问题。基本上我的问题是如何才能完成我需要的东西?我错过了什么?
答案 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;
}
这种块将在调用方法
中