失败时将验证结果从 WCF 服务(使用 EF4 数据处理)传递到 MVC3 客户端的方法
我实现了一个 ASP.NET MVC3 应用程序,其中通过 WCF 服务访问数据。 WCF 服务使用 EF4.1 通过实体的 DBContext 和 POCO 类进行数据访问。 我可以在服务器端使用数据验证属性来注释属性,并且还可以通过定义自定义验证属性(源自 ValidationAttribute),或通过实现 IValidatableObject )。
但我有一个问题:如果验证失败,将验证错误信息从 WCF 传递到客户端,然后在 MCV3 客户端中使用它的最佳方法是什么?
据我对 WCF 的理解,客户端和 WC 服务之间交换的每个数据都应该是数据契约的一部分,并且不应使用异常作为在服务器和客户端之间传递有意义的信息的方式(例如抛出 ValidationException 并为验证失败信息设置额外的属性) )。
同样在使用 EF 的 WCF 中,我调用 dbContext.SaveData(),但如果数据无效,它会抛出异常,这是我不想要的。
那么:
如何在 EF 中显式调用验证并确保对象有效并且我可以调用 SaveData(),或者对象无效并且我可以以某种方式收集验证失败信息以传递给客户端。
我如何将此验证失败信息传递回客户端,作为数据契约的一部分,而不是异常。
谢谢
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:
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.
Haw can I pass this validation failure information back to client, as part of data contract, and not an an exception.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用两种方法:
FaultException
验证失败。类型化错误异常是定义“预期”异常的方法 - 它只是在 SOAP 错误中传递的另一个数据契约,描述某些失败。You can use two approaches:
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.