Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在失败时将验证结果从WCF服务(使用EF4数据处理)传递到MVC3客户端的方法_Wcf_Validation_Entity Framework 4_Wcf Client - Fatal编程技术网

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

在失败时将验证结果从WCF服务(使用EF4数据处理)传递到MVC3客户端的方法,wcf,validation,entity-framework-4,wcf-client,Wcf,Validation,Entity Framework 4,Wcf Client,我实现了一个ASP.NET MVC3应用程序,通过WCF服务访问数据。 WCF服务使用EF4.1访问实体的DBContext和POCO类的数据。 我可以在服务器端使用数据验证属性对属性进行注释,还可以通过定义自定义验证属性(派生自)或通过实现来实现自定义验证 但我有一个问题:如果验证失败,那么将验证错误信息从WCF传递到客户端,然后在MCV3客户端中使用它的最佳方法是什么 正如我对WCF的理解,客户机和WC服务之间交换的每个数据都应该是数据契约的一部分,并且不应该使用异常作为服务器和客户机之间传

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

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

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

同样在使用EF的WCF中,我调用dbContext.SaveData(),但若数据无效,它会抛出异常,我不希望出现异常

因此:

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

  • 作为数据契约的一部分,我可以将此验证失败信息传递回客户机,而不是例外


  • 谢谢

    您可以使用两种方法:

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

    谢谢。但是,如何在不调用SaveData()的情况下验证WCF/EF中的实体,或者如何在EF的dataContext.SaveData()引发异常时使用验证失败信息填充MyFaultContract?任何代码片段或指向相关文章的链接都可以帮助我:)MSDN中引用的文章包含代码片段-在调用save data、prepare fault contract和抛出new
    FaultException
    时,您将捕获验证异常。