我第一次编写WCF服务。该服务及其所有客户端(至少目前为止)均以C#编写。该服务必须对其接收到的数据进行大量的输入验证,因此我需要有一些方法将无效数据指示回客户端。我一直在阅读关于故障和异常的文章,将异常包装成故障,并且有很多相互矛盾的文章,这让我更加困惑。处理这种情况的正确方法是什么?
我应该完全避免使用异常并打包一个结果返回消息吗?我应该创建一个特殊的故障、特殊的异常,还是只像非WCF验证函数一样抛出ArgumentExceptions?
我现在拥有的代码(受MSDN的影响)是:
我应该完全避免使用异常并打包一个结果返回消息吗?我应该创建一个特殊的故障、特殊的异常,还是只像非WCF验证函数一样抛出ArgumentExceptions?
我现在拥有的代码(受MSDN的影响)是:
[DataContract]
public class ValidationFault
{
[DataMember]
public Dictionary<string, string> Errors { get; private set; }
[DataMember]
public bool Fatal { get; private set; }
[DataMember]
public Guid SeriesIdentifier { get; private set; }
public ValidationFault(Guid id, string argument, string error, bool fatal)
{
SeriesIdentifier = id;
Errors = new Dictionary<string, string> {{argument, error}};
Fatal = fatal;
}
public void AddError(string argument, string error, bool fatal)
{
Errors.Add(argument, error);
Fatal |= fatal;
}
}
在这个方法上有[FaultContract(typeof(ValidationFault))]。那么这是处理这个问题的“正确”方式吗?