【问题标题】:WCF Input/Output DataContract definition guidelinesWCF 输入/输出 DataContract 定义指南
【发布时间】:2012-07-02 17:18:53
【问题描述】:

我需要一些关于为以下场景定义 DataContracts 的最佳方式的指导: 1. 我有 2 种网络方法,一种用于上传原始数据 2. 此数据在服务器上用于某些计算。即一个项目有一组计算, 3. 所以我的实体设计是这样的,Item 实体有 Calculation 实体的集合。该集合未标记为 DataMember。 4. GetItemDetails 方法返回每个项目及其计算集合。 5. 我最终为 Upload 和 GetItemDetails 操作定义了 2 个不同的 DataContract,因为 Item 是我的主要实体,用于我的所有业务逻辑操作,但它的计算集合是在服务器端生成的数据,必须按需返回(获取项目详细信息)。由于它正在处理数据,因此在上传时公开它似乎是不合适的,因为计算集合中不需要输入。 6. 在我的 GetItemDetails 方法中,我使用“项目”实体并分别加载项目集合。计算集合,然后将其转换为我的输出数据合同,其中项目和集合都暴露了。

这种方法的缺点是必须为相同的实体表示维护 2 个数据合约。 我试图搜索在 GetItemDetails 方法的 Calculation 集合上动态添加 DataMember 属性的选项,但没有成功。 我希望情况很清楚。我的问题是在这种情况下定义数据合同的最佳方式是什么,这样客户端就不必处理 2 个不同的代理类来表示相同的上传和获取实体。如果两者都使用相同的实体,这是否是一个正确的解决方案,以便我的上传合同公开(然后忽略任何输入)计算集合,即使用户不希望将其提供给我的上传操作?

我将不胜感激。

【问题讨论】:

    标签: wcf datacontracts


    【解决方案1】:

    您应该检查 KnownType WCF 属性。这将允许您指定可以接受的其他对象。

    KnownType attribute on MSDN

    另一种选择是使用继承,并拥有一个具有最少属性的基类和一个从基类继承的更健壮的类。虽然这不会绕过重复的实体对象,但至少向上转换/向下转换可以工作。

    另一种选择是拥有单独的对象。客户会具体知道需要设置什么。没有猜测工作。只公开你需要的。我最倾向于这个选项或继承选项。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 2013-04-15
      • 2015-06-15
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多