WCF:无法捕获FaultException(TDetail) - 只有非泛型的FaultException

时间:2014-08-15 00:03:40

标签: .net wcf

我正在抛出FaultException< RetornoErro>在服务器上,但它没有被客户端捕获。客户端只能捕获不公开Detail的非泛型FaultException。

任何可能遗漏或错误的想法?

我的服务合同:

[ServiceContract]
public interface IServicoLoja
{
    [OperationContract]
    [FaultContract(typeof(RetornoErro))]
    Retorno<Guid> AdicionarOuAlterar(Loja req);
}

实现:

[ServiceBehavior]
public class ServicoLoja : IServicoLoja
{
    public Retorno<Guid> AdicionarOuAlterar(Modelo.Loja req)
    {
        try
        {
            ......
        }
        catch (Exception ex)
        {
            var ret = new RetornoErro(ex);
            throw new FaultException<RetornoErro>(ret, ex.Message);
        }
        .....
    }
}

服务代理:

public class ServicoLojaClient : ClientBase<IServicoLoja>, IServicoLoja
{
    public Retorno<Guid> AdicionarOuAlterar(Loja req)
    {
        return Channel.AdicionarOuAlterar(req);
    }
}

在客户端:

try
{
    ...
}
catch (FaultException<RetornoErro> ex)
{
    //this is not reached
}
catch(FaultException ex)
{
    //this is reached
}

服务合同位于客户端上引用的独立程序集上。包含“RetornoErro”的程序集也被引用。

感谢。

1 个答案:

答案 0 :(得分:3)

我发现了问题:

RetornoErro有[DataMember]的属性,没有setter,所以我猜它不能被反序列化。