您好我在处理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;
}
我没有得到上述错误,但我只收到异常消息而没有内部异常。 我做错了什么?
答案 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'"));
}