【发布时间】:2013-02-09 06:10:42
【问题描述】:
我有一个 WCF 应用程序,它有一堆域实体(由 NHibernate 映射)和服务合同。目前,我通过服务合同直接向 WCF 客户端公开实体。但这使我遇到了 WCF 数据契约的许多限制,特别是那些与序列化相关的限制。例如圆形图限制、KnownTypes 等。
似乎更好的方法是在服务器端使用实体并使用 DTO 在 WCF 服务器和客户端之间传输对象。我对吗?是必须的吗?
【问题讨论】:
我有一个 WCF 应用程序,它有一堆域实体(由 NHibernate 映射)和服务合同。目前,我通过服务合同直接向 WCF 客户端公开实体。但这使我遇到了 WCF 数据契约的许多限制,特别是那些与序列化相关的限制。例如圆形图限制、KnownTypes 等。
似乎更好的方法是在服务器端使用实体并使用 DTO 在 WCF 服务器和客户端之间传输对象。我对吗?是必须的吗?
【问题讨论】:
WCF 是一个基于消息的系统 - 它基本上通过 XML 序列化数据消息连接客户端和服务器。因此,WCF只能来回发送静态数据 - 它不是一个“远程过程调用”或“远程对象”系统,您可以在其中将功能从客户端传输到服务器并返回。
由于任何 WCF 传输都必须是 XML 可序列化的,因此它实际上只是关于数据 - 所以是的 - WCF 最适合仅发送来回 DTO 样式数据对象。
【讨论】: