将失败时的验证结果从WCF服务(使用EF4数据处理)传递到MVC3客户端的方法

时间:2011-10-26 07:38:50

标签: wcf validation entity-framework-4 wcf-client

我实现了一个ASP.NET MVC3应用程序,其中数据通过WCF服务进行访问。 WCF服务使用EF4.1进行数据访问,使用DBContext和实体的POCO类。 我可以在服务器端使用数据验证属性注释属性,并且我可以通过定义自定义验证属性(从ValidationAttribute派生)或通过实现IValidatableObject来实现自定义验证。

但我有一个问题:如果验证失败,将验证错误信息从WCF传递到客户端,然后在MCV3客户端中使用它的最佳方法是什么?

正如我对WCF所理解的,客户端和WC服务之间交换的每个数据都应该是数据协定的一部分,并且不应该使用异常作为在服务器和客户端之间传递有意义信息的方式(比如抛出ValidationException并设置额外的属性)验证失败信息)。

同样在使用EF的WCF中我调用dbContext.SaveData(),但是如果数据无效,则抛出异常,这是我不想要的。

所以:

  1. 如何在EF中显式调用验证并确保对象有效且我可以调用SaveData(),或者对象无效,我可以收集某些验证失败信息以传递给客户端。

  2. 我可以将此验证失败信息作为数据合同的一部分传递回客户端,而不是例外。

  3. 由于

1 个答案:

答案 0 :(得分:1)

您可以使用两种方法:

  • 使用标准响应数据合同获取成功,使用fault contract使用FaultException<YourFaultContract>进行验证失败。类型化的错误异常是定义“预期”异常的方式 - 它只是SOAP Fault中传递的另一个数据协定,描述了一些失败。
  • 创建响应数据合同,其中包含结果代码,响应数据,失败消息等内容,并将此数据合同用于成功和失败。我不喜欢这种方法,但在某些以特殊方式处理故障的ESB中更容易使用。