【问题标题】:WCF DataContractWCF 数据合约
【发布时间】:2009-09-14 19:10:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: wcf datacontract


    【解决方案1】:

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

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

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

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

    • 一个类库,其中包含服务契约(IService 接口)、数据契约,可能还有故障契约
    • 包含实际服务实现(实现服务接口的类)的类库自托管 EXE(控制台应用)

    马克

    【讨论】:

      【解决方案2】:

      答案是 - 视情况而定。

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

      当您将它们分开时,您可以引用和使用您的数据合约,而无需拖拽您的操作合约,这让您在构建应用程序时更加灵活。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多