Wcf 在服务器和客户端之间共享DataAnnotations元数据类

Wcf 在服务器和客户端之间共享DataAnnotations元数据类,wcf,validation,asp.net-mvc-3,data-annotations,Wcf,Validation,Asp.net Mvc 3,Data Annotations,我很好奇这是不是一个疯狂的想法。现在我有一个典型的结构如下 客户端当前为asp.net mvc3,但将来可能是任何内容 WCF服务层 域层 数据层 我在我的域层中做了一些非常复杂的验证。数据注解是不够的。因此,验证是以更手动的方式完成的,但仍然通过服务层传递回客户机 但是,有一个简单的验证字段不为null,必须大于0,DataAnnotations适合的字符数不能超过10个 这是我的计划。我已经发布了一个基本的DataContract dll,其中包含DTO对象。这是因为我有多个WCF服务。我计

我很好奇这是不是一个疯狂的想法。现在我有一个典型的结构如下

客户端当前为asp.net mvc3,但将来可能是任何内容 WCF服务层 域层 数据层

我在我的域层中做了一些非常复杂的验证。数据注解是不够的。因此,验证是以更手动的方式完成的,但仍然通过服务层传递回客户机

但是,有一个简单的验证字段不为null,必须大于0,DataAnnotations适合的字符数不能超过10个

这是我的计划。我已经发布了一个基本的DataContract dll,其中包含DTO对象。这是因为我有多个WCF服务。我计划创建一个具有DataAnnotations属性的buddy元数据类的程序集。然后,该类将用于我的DTO和我的域实体。通过这种方式,我可以在不通过web服务的情况下获得简单的验证,但它仍然在一个地方。然而,对于不支持java的客户机,例如,如果他们通过WCF服务,他们仍然会得到验证

最初我不想向客户机分发任何内容,但为了在服务之间共享数据契约,我必须这样做

这是一个疯狂的想法吗?我知道其他人只是在做双重验证。有没有更好的方法来实现这一点?我已经对它进行了测试,它确实可以工作,但我不确定当我的整个模型刚刚完成原型制作时,它的伸缩性会有多好


谢谢

这种方法没有错。在我看来,将您的DataContract分离到一个单独的程序集中并与.NET客户端共享这些契约是一种最佳实践,听起来您只是更进一步,并共享验证程序集


我还与.NET客户共享我的服务合同,这样客户就不必添加服务引用,这很糟糕。

我也在考虑这种方法,但我想小心需要向客户分发的内容。如果太多,那么使用web服务就没有意义了。我还不如把所有东西都分发出去。找到平衡是很困难的。这一点是有道理的,但分享合同会以这样或那样的方式发生。如果添加服务引用,将生成客户端合同。因此,它将会发生,通过共享,您可以防止名称空间地狱,并控制客户端契约的方式/时间。而且,只要实现是从用户抽象出来的,服务就完成了它的工作。客户永远不应该知道执行情况,只应该知道合同。有意义吗?这是dnrTV的一个好插曲,涵盖了这个主题: