在企业级程序集中定义DataContracts然后在WCF服务项目中引用它们而不是在单个WCF服务解决方案级别定义它们是一个好的做法吗?我见过的所有WCF示例都避免了该主题,并且仅在服务解决方案中定义了DataContracts。我与之交谈的一些程序员希望将DataContracts视为企业级规范数据模型的不同风格,而不是服务本地合同。我还没有找到支持或反对这种观点的论据。
可能很难为这个问题选择正确的答案,但我会尝试。我将至少放弃任何我认为增加了对该主题的理解的投票。
答案 0 :(得分:8)
我非常喜欢将DataContracts(和服务合同)放入程序集然后与服务和客户端共享它们的想法,但我认为没有任何理由将它们全部放入一个整体程序集中。
根据它们的使用方式将它们放入装配体中更有意义。如果有几组服务和客户共享,那么这就是一个程序集等。
这样做不需要公开元数据,我认为它可以让你做一些很好的事情,比如在服务器端和客户端连接序列化事件。
答案 1 :(得分:2)
IDesign.net上的人们建议跨项目共享合同集。我个人推荐这个,而不是为所有东西创建代理。实际上没有令人信服的理由不。
确保您的疑虑在此处分开非常重要。您提议的程序集应该只包含类型而不是任何实现,以免您更频繁地重新分发DLL。
我还建议您将一起版本的合同分组到程序集中,而不是一个整体程序集。在对企业级合同进行非常小的更改时,这将减少您的开销。
答案 2 :(得分:1)
与计算机科学中的大多数事情一样,答案是 - 它取决于:)
您的数据合同类是否仅在一个,两个服务或整个企业的范围内相关? 他们可能会改变吗?想想这些问题。
如果您确实希望将它们作为全局程序集的一部分,并且您正在使用.NET 3.5 Sp1,那么您就不需要在数据类上使用DataContract / DataMember属性。如果您不希望依赖System.ServiceModel(在大多数情况下您不依赖),这可能很有用。