0

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

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

我将不胜感激这方面的任何帮助。

4

1 回答 1

0

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

MSDN 上的 KnownType 属性

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

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

于 2012-07-02T19:54:30.457 回答