2009-09-14 63 views
0

如果我没有在单独的程序集中保留服务合同,代理和服务,服务合同和代理驻留在客户端程序集中,并且服务驻留在服务程序集中。WCF DataContract

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

数据合同可以驻留在两个程序集中吗?

回答

2

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

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

作为一名服务开发人员,您必须在服务器端拥有DataContract。但同样也适用于服务合同 - 这些服务合同也必须在服务器端 - 否则您将无法将您的服务接口发布到世界上供任何可能连接到您的服务的人使用。

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

  • 其中包含了服务合同(IService接口),数据合同,以及可能的故障一类库合同
  • 一个类库自托管EXE(控制台应用程序),它包含实际的服务实现(实现服务接口的类)

Marc

0

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

0

答案是 - 这取决于。

通常最好将它们分开,但可能会出现将它们放在一起的情况。

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

您也可以独立版本您的合同。

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