Wcf异常处理会抛出错误

时间:2010-09-02 14:23:29

标签: wcf exception faultexception

您好我在处理wcf中的异常时遇到问题。 我有这样的服务:

[ServiceContract]
public interface IAddressService
{
    [OperationContract]
    [FaultContract(typeof(ExecuteCommandException))]
    int SavePerson(string idApp, int idUser, Person person);
}

我在WCFTestClient实用程序中调用服务上的SavePerson()。 SavePerson()实现是:

public int SavePerson(string idApp, int idUser, Person person)
{
    try
    {
        this._savePersonCommand.Person = person;

        this.ExecuteCommand(idUser, idApp, this._savePersonCommand);

        return this._savePersonCommand.Person.Id;
    }
    catch (ExecuteCommandException ex)
    {
        throw new FaultException<ExecuteCommandException>(ex, new FaultReason("Error in   'SavePerson'"));
    }
}

但是我收到了这个错误:

  

无法调用该服务。可能   原因:服务处于脱机状态或   交通不便;客户端   配置不匹配   代理;现有代理无效。   有关更多信息,请参阅堆栈跟踪   详情。你可以尝试恢复   启动新代理,恢复到   默认配置或刷新   服务。

如果我更改了SavePerson方法而不是:

catch (ExecuteCommandException ex)
{
    throw new FaultException<ExecuteCommandException>(ex, new FaultReason("Error in   'SavePerson'"));
}

我做

catch(Exception)
{
    throw;
}

我没有得到上述错误,但我只收到异常消息而没有内部异常。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

定义故障合同时:

[FaultContract(typeof(ExecuteCommandException))] 

您不能指定例外类型。而是指定您选择的数据协定,以传回您认为必要的任何值。

例如:

[DataContract]
public class ExecuteCommandInfo {
    [DataMember]
    public string Message;
}

[ServiceContract]
public interface IAddressService {
    [OperationContract]
    [FaultContract(typeof(ExecuteCommandInfo))]
    int SavePerson(string idApp, int idUser, Person person);
}

catch (ExecuteCommandException ex) { 
    throw new FaultException<ExecuteCommandInfo>(new ExecuteCommandInfo { Message = ex.Message }, new FaultReason("Error in   'SavePerson'")); 
}