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

发布于 2024-12-12 03:30:43 字数 900 浏览 0 评论 0原文

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

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

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

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

那么:

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

  2. 我如何将此验证失败信息传递回客户端,作为数据契约的一部分,而不是异常。

谢谢

I implement a ASP.NET MVC3 application, where data is accessed through WCF services.
The WCF service uses EF4.1 for data access with DBContext and POCO classes for entities.
I can annotate the properties with data validations attributes on the server side, and also I can implement custom validation by defining either custom validation attributes (derived from ValidationAttribute), or by implementing IValidatableObject ).

But I have a problem: if validation fails, what is the best approaoch to pass validation error info from WCF to client, and then use it in MCV3 client?

As I understand with WCF, every data exchanged between client and WC service should be part of the data contract, and should not use exceptions as ways of passing meaningful information between server and client (like throwing a ValidationException with extra properties set for Validation failure info).

Also in WCF who uses EF I call dbContext.SaveData(), but if data is not valid, it throws exception, which I don't want.

So:

  1. how can I call validation explicitly in EF and make sure either the object is valid and I can call SaveData(), or the object is invalid and I can collect somehow validation failure information to pass to client.

  2. Haw can I pass this validation failure information back to client, as part of data contract, and not an an exception.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深爱成瘾 2024-12-19 03:30:43

您可以使用两种方法:

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

You can use two approaches:

  • Use standard response data contract for success and fault contract with FaultException<YourFaultContract> for validation failure. Typed fault exceptions are way to define "expected" exceptions - it is just another data contract passed in SOAP Fault describing some failure.
  • Create response data contract which contains something like result code, response data, failure message etc. and use this data contract for both success and failure. I don't like this approach but it is easier to use in some ESB where faults are processed in special way.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文