我有一个 WCF 服务,可以返回多个不同的集合。
每个集合中的对象可以引用其他集合中的对象。例如。我有一组订单和一组客户。客户对象包含订单引用的集合,每个订单都包含一个客户引用。
我想知道人们通常如何在客户端处理这种事情。据我所知,我的选择是:
1) 只需让 WCF 完整序列化任何成员对象即可,不用担心重复。我知道我可以使用 [PreserveReferences] 在某种程度上缓解这种情况,但仍然存在大量重复和不必要的序列化。即,如果我从服务请求客户对象,它将序列化客户拥有的每个订单的所有成员,即使我已经在客户端的订单集合中拥有这些对象。这也意味着我必须始终小心地通过 Id 来匹配事物,而不仅仅是比较实例。
2) 序列化 ID 而不是实例。这似乎是最明智的方法,但意味着我必须在客户端将这些 Id 再次转换为实例。这带来了在哪里执行此操作以及如何注入(inject)所需的存储库来进行连接的困惑。
3) 只需在客户端中的任何地方使用 Id,而不是连接实例。这对我来说是错误的,并且偏离了 OOP 的全部意义。我必须访问 id 集合,然后通过某个全局存储库查找它们,而不是访问对象上的集合。
目前我倾向于 2,但我不喜欢这将导致的序列化困惑。
我应该注意到,客户端可能比大多数 WCF 客户端更有状态,并且它通过回调等维护与服务的开放连接以维护其集合,因为它显示实时数据。
干杯
最佳答案
我认为另一个选择是默认情况下不检索数据集合。使用您的示例,我可以定义几个 WCF 方法:
ListCustomers() -- 返回客户对象,但不填充订单集合 ListOrders() -- 返回订单对象,每个订单对象都附加一个客户对象,但客户对象没有订单信息。
ListOrdersForCustomer(id customer) -- 返回特定客户的订单。
当然,这有其自身的缺点,但可能适用于您的示例。
关于.net - 在 WCF 客户端中连接返回的对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580479/