WCF 服务在 catch 中通过 if 语句失败(Exception ex)
WCF Service Falling Through if Statement in catch(Exception ex)
我有一个 WCF 服务,在我的一个方法中我试图抛出一个显式 FaultException。这个抛出被我的 catch 语句捕获,我的目的是检查异常是否是我的显式类型,如果是则重新抛出。调试器显示这是成功发生的,但也会抛出在 else 之后发现的新 FaultException。它是发送到我的客户端的通用 FaultException。我无法解释这种行为?
try
{
using (var db = new DataContext())
{
var obj = GetSomeObject(objectId, db);
if (!obj.Conditional)
throw new FaultException<ValidateStatusFault>(new ValidateStatusFault { Details = "Object '" + obj.Id + "' has not been some condition.", Issue = "Object '" + obj.Id + "' cannot be validated." });
// Additional checks.
}
}
catch (Exception ex)
{
if (ex is FaultException<ValidateStatusFault>)
throw; // I reach this breakpoint successfully.
else
throw new FaultException(ex.Message); // I also reach this breakpoint?
}
您不需要明确地进行这项检查。您可以捕获 2 个不同的异常,然后将为您完成过滤。
try
{
}
catch (FaultException<ValidateStatusFault> faultException)
{
throw; // I reach this breakpoint successfully.
}
catch(Exception ex)
{
throw new FaultException(ex.Message);
}
不幸的是,catch 块中的 'if statements' 不起作用。你必须像下面这样使用。
无论是否有任何 if 语句,每个单独的 throw 语句都会被抛出。
try {
tryStatements
}
catch(FaultException<ValidateStatusFault> faultException){
catchStatements
}
catch(Exception ex)
{
throw new FaultException(ex.Message);
}
finally {
finallyStatements
}
我有一个 WCF 服务,在我的一个方法中我试图抛出一个显式 FaultException。这个抛出被我的 catch 语句捕获,我的目的是检查异常是否是我的显式类型,如果是则重新抛出。调试器显示这是成功发生的,但也会抛出在 else 之后发现的新 FaultException。它是发送到我的客户端的通用 FaultException。我无法解释这种行为?
try
{
using (var db = new DataContext())
{
var obj = GetSomeObject(objectId, db);
if (!obj.Conditional)
throw new FaultException<ValidateStatusFault>(new ValidateStatusFault { Details = "Object '" + obj.Id + "' has not been some condition.", Issue = "Object '" + obj.Id + "' cannot be validated." });
// Additional checks.
}
}
catch (Exception ex)
{
if (ex is FaultException<ValidateStatusFault>)
throw; // I reach this breakpoint successfully.
else
throw new FaultException(ex.Message); // I also reach this breakpoint?
}
您不需要明确地进行这项检查。您可以捕获 2 个不同的异常,然后将为您完成过滤。
try
{
}
catch (FaultException<ValidateStatusFault> faultException)
{
throw; // I reach this breakpoint successfully.
}
catch(Exception ex)
{
throw new FaultException(ex.Message);
}
不幸的是,catch 块中的 'if statements' 不起作用。你必须像下面这样使用。
无论是否有任何 if 语句,每个单独的 throw 语句都会被抛出。
try {
tryStatements
}
catch(FaultException<ValidateStatusFault> faultException){
catchStatements
}
catch(Exception ex)
{
throw new FaultException(ex.Message);
}
finally {
finallyStatements
}