1

我刚刚开始了一个需要 WCF 服务来处理分布式环境的新项目。我仍在努力寻找实现事物的最佳方法。

我想使用 NHibernate,但我已经看到了几种不同的方法来解决序列化问题。这是在 3.0 中处理的吗?我注意到卡车内的 wcf_context :D

如果不处理,有人可以指出我正确的方向吗?

感谢大家

4

2 回答 2

3

通常,如果要从服务返回数据,则需要返回特定于服务目的的类,其中包含与该服务调用相关的内容、DTO(数据传输对象)或 WCF 中的 DataContract世界。

AutoMapper是对实体和 DTO 之间的映射特别有用的一种工具。无论您使用 AutoMapper 还是仅使用“左右”编码,这都将防止延迟加载/延迟执行问题,因为执行映射会导致执行发生。

从服务中返回实体可能不是一个好主意的原因有很多,这里有一些(对此大部分有不同的意见)

  • 根据您的持久性(在您的情况下为 nhib),您可能有行为(延迟执行)或附加到您的实体的状态,这些行为或状态将无法在另一个应用程序或服务器中正确执行
  • 返回实体导致服务层通常会导致调用非常类似于 CRUD,导致服务层非常冗长,并且非常非 SOA
  • 不同的调用可能需要更多或更少的数据,而不仅仅是实体,DTO 使您能够准确地总结您需要的内容,而您不需要。
  • 如果您尝试构建可重用的服务层,则不应假设您的客户可以访问您的实体或域逻辑,而不是您的服务中的内容。它们可以用另一个应用程序、另一种语言等编写。如果你的实体是你用来移动数据的东西,你会倾向于忘记这一点。
于 2010-12-28T02:00:58.163 回答
0

您不能使用 WCF 传递延迟加载的对象。

有一些解决方法,但有一个错误将在下一个 WCF 版本中修复(即将推出,2010 年 4 月)

除此之外,只要您使用正确的 DataContract 定义对象,它们就会愉快地一起离开。

列表的序列化也存在问题 - 您需要使用带有特定标志的 svcutil 生成代理,否则会发生坏事(列表变成数组并且您无法添加更多项目)(除非您使用某种列表WCF 和 NHibernate 都同意)- 查一下(Nhiberate 和 WCF 列表)-

于 2010-03-30T22:03:33.053 回答