0

如果我不将服务合同、代理和服务保存在单独的程序集中,则服务合同和代理驻留在客户端程序集中,而服务则驻留在服务程序集中。

如果我不将数据合同保存在单独的程序集中,它应该驻留在客户端还是服务端?

数据协定可以驻留在两个程序集中吗?

4

3 回答 3

2

在典型的面向服务的场景中,您的服务器端服务库中有 DataContract。任何打电话给你的人都会向你的服务添加一个客户端代理连接,因此实际上是在复制你的 DataContract。

因此,在“正常”情况下,您在服务器端拥有“主”DataContract,并且每个客户端代理中都有一个单独的类来访问您的服务。这些客户端副本是“在线上相同的”,例如它们序列化为相同的消息格式 - 这实际上是您的客户端和服务器之间的所有内容 - 一个来回发送的序列化消息。

作为服务开发人员,您肯定必须在服务器端拥有 DataContract。但同样的道理也适用于服务契约——它们也必须在服务器端——否则你将无法将你的服务接口发布到世界上,以供任何可能连接到你的服务的人使用。

我建议每个服务器至少有以下两个项目:

  • 包含服务契约(IService 接口)、数据契约和可能的故障契约的类库
  • 包含实际服务实现(实现服务接口的类)的类库自托管 EXE(控制台应用程序)

马克

于 2009-09-14T19:32:58.797 回答
0

我强烈建议有一个单独的程序集,其中包含客户端和服务器端都引用的接口和合同。

于 2009-09-14T19:13:38.033 回答
0

答案是——视情况而定。

通常最好将它们分开,但在某些情况下,将它们放在一起也是不错的选择。

当您将它们分开时,您可以引用和使用您的数据合同,而无需拖拽您的操作合同,这为您构建应用程序的方式提供了更大的灵活性。

您还可以独立地对合约进行版本控制。

但这一切都取决于您的实际应用。

于 2009-09-14T19:16:23.130 回答