【发布时间】:2009-09-14 19:10:28
【问题描述】:
如果我不将服务合同、代理和服务保存在单独的程序集中,服务合同和代理将驻留在客户端程序集中,而服务则驻留在服务程序集中。
如果我不将数据合同保存在单独的程序集中,它应该驻留在哪里,客户端还是服务端?
数据协定可以驻留在两个程序集中吗?
【问题讨论】:
标签: wcf datacontract
如果我不将服务合同、代理和服务保存在单独的程序集中,服务合同和代理将驻留在客户端程序集中,而服务则驻留在服务程序集中。
如果我不将数据合同保存在单独的程序集中,它应该驻留在哪里,客户端还是服务端?
数据协定可以驻留在两个程序集中吗?
【问题讨论】:
标签: wcf datacontract
在典型的面向服务的场景中,您的服务器端服务库中有 DataContract。任何打电话给您的人都会向您的服务添加客户端代理连接,因此实际上会复制您的 DataContract。
因此,在“正常”情况下,您在服务器端拥有“主”DataContract,并且每个客户端代理中都有一个单独的类来访问您的服务。这些客户端副本“在线上相同”,例如它们序列化为相同的消息格式 - 这实际上是您的客户端和服务器之间的所有内容 - 一个来回发送的序列化消息。
作为服务开发人员,您肯定必须在服务器端拥有 DataContract。但同样的道理也适用于服务合约——它们也必须在服务器端——否则你将无法向世界发布你的服务接口,以供任何可能连接到你的服务的人使用。
我建议每个服务器至少有以下两个项目:
马克
【讨论】:
答案是 - 视情况而定。
通常首选将它们分开,但在某些情况下,将它们放在一起也是不错的选择。
当您将它们分开时,您可以引用和使用您的数据合约,而无需拖拽您的操作合约,这让您在构建应用程序时更加灵活。
您还可以独立对合约进行版本控制。
但这一切都取决于您的实际应用。
【讨论】:
我强烈建议使用一个单独的程序集,其中包含客户端和服务器端都引用的接口和协定。
【讨论】: