如果在catch中声明,WCF服务将会崩溃(Exception ex)

时间:2015-03-31 15:12:29

标签: c# wcf exception

我有一个WCF服务,在我的一个方法中,我试图抛出一个显式的FaultException。我的catch语句捕获了这个throw,我的目的是检查异常是否属于我的显式类型,如果是这样,则重新抛出。调试器显示这成功发生,但也抛出在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 个答案:

答案 0 :(得分:1)

不幸的是,catch块中的'if statements'不起作用。你必须使用如下。

无论if语句如何,都会抛出每个throw语句。

try {
    tryStatements
}
catch(FaultException<ValidateStatusFault> faultException){ 
    catchStatements
}
catch(Exception ex)
{
  throw new FaultException(ex.Message); 
}
finally {
    finallyStatements
}

答案 1 :(得分:0)

您无需明确执行此检查。你可以有2个不同的例外捕获,并且将为你完成过滤。

try
{
}
catch (FaultException<ValidateStatusFault> faultException)
{
        throw; // I reach this breakpoint successfully.

}
catch(Exception ex)
{
  throw new FaultException(ex.Message); 
}
相关问题