.net - 在 WCF 客户端中连接返回的对象实例

标签 .net wcf instance

我有一个 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/

相关文章:

c# - 从 Office 本身更新 ClickOnce VSTO 加载项不会更新加载项

c# - WCF:嵌套的 DataContract 值为空

c# - 在区域外的 MVC 应用程序中托管 WCF 服务

performance - AWS EC2 t2.micro 无限 | Jenkins Maven |很慢|构建挂起

python - 类实例中未保存的随机值

ios - 如何在不创建类实例的情况下为类设置值?

.net - 正则表达式问题

c# - 如何检查 NLog 是否已以异步模式完成从其队列中记录消息?

.net - WatiN 停产了吗?

wcf - 使用 DataContractSerializer 序列化时命名 'ArrayOf'