我的 Service 的 OperationContract 的主要参数是一个名为 Preapproval 的类。在 Preapproval 类中,有一些用于 DataMember 属性的公共 getter/setter。我有验证设置器输入的代码,这样我会抛出 ArgumentException,如果说参数为空白或超出域的正确范围。
如果输入无效,我通常会在这里抛出 ArgumentException。由于这是 WCF 情况,我是否必须在此处抛出预定义的 FaultException 而不是 ArgumentException?我知道,在其他地方,我可能会捕获一般异常并将它们作为 FaultExceptions 重新抛出,但是在 WCF 管道自动执行的某些工作中,此活动将发生在堆栈的更高层。
例如,当调用者调用我的服务时,序列化程序将反序列化他们的 SOAP,尝试调用我的对象上的设置器,并在实际调用我的操作之前体验到 ArgumentException 的抛出。因此,在 DataContract 类中,简单地立即抛出 FaultExceptions 是一种好的设计实践吗?我真的不想将自定义处理程序连接到通道调度程序。
我知道我可以简单地直接抛出 FaultExceptions,但我真的很想将这种事情限制在服务中。如果无法避免,我也可以在支持类中进行,但我更愿意尽可能编写典型代码,与 System.ServiceModel 等耦合不那么紧密。
谢谢!