2

我正在使用验证应用程序块 - 企业库来验证发送到我的 WCF 服务操作的参数。例如,某个操作要求参数为 1 或 6,如下所示:

[OperationContract(Name="GetEmployeesByRegion")]
[FaultContract(typeof(ValidationFault))]
List<Employees> GetEmployeesByRegion([DomainValidator(1,6)]int regionId);

这工作得很好,即发生验证错误,但是当客户端调用服务时,会抛出通用 System.ServiceModel.FaultException。一条消息表明:“此故障的创建者未指定原因。”

现在,我可以在服务校准之前自己检查参数并引发自定义错误,但这似乎违背了使用验证应用程序块对参数进行基于属性的验证的目的。是否有自定义验证错误返回的错误?我也有可能做错了什么。我只想让调用者知道他/她应该在异常消息中传入 1 或 6。这可能吗?

4

2 回答 2

4

实际上,故障中存在一个集合,其中包含您要查找的所有消息:

foreach (ValidationDetail detail in fault.Detail.Details)
{
   ...
}
于 2009-01-17T04:32:46.953 回答
0

所以这是古老的,但我遇到了同样的问题并且确实找到了答案。

对我来说,问题是我在客户端中创建了对服务的引用添加了 [ValidationBehavior] 和 [FaultContract<ValidationFault>)] 属性。为了让它工作,我不得不刷新参考。

其他一些可能需要检查的事项:

1) 这是在 Enterprise Library 6 中修复的错误。我不确定那个错误,但发现一些提到 EntLib 的代码修复类似问题。确保您使用的是最新版本的 EntLib。

2) 您正在为验证错误消息使用 ErrorMessage 参数,而不是 MessageTemplate。

于 2014-12-03T19:13:06.657 回答