2

我们正在迁移我们的 .net Remoting 应用程序以使用 WCF。现在让我感到困惑的一件事是 WCF 引入但远程处理不需要的“已知类型”的概念。虽然我有点了解已知类型是什么以及它们的作用,但我感到困惑的是 WCF 和 Remoting 之间的区别 - 在发件人方面,如果 WCF 没有足够的关于手头对象的类型信息来序列化它,为什么Remoting?接收者也一样:为什么 .net Remoting 在反序列化接收到的对象时没有问题,但 WCF 有问题?那是因为远程处理将元数据与数据一起发送吗?如果是这样,为什么 WCF 不能这样做?

4

1 回答 1

7

您是对的 - .NET 远程处理随请求发送类型元数据。WCF可以做同样的事情,但默认情况下它不会 - 它有很多额外的信息,这使得请求更大并且处理起来更复杂(影响性能)。不发送类型信息也允许松耦合系统,其中客户端和服务器可以分开版本,并且只要它们遵守在原始版本中建立的合同,它们将继续工作。而且它还允许 WCF 与在非 NET 平台上编写的系统进行对话(这对于依赖共享类型信息的远程处理或其他技术是不可能的)。

如果您真的想采用非已知类型的方式,您可以将 WCF 使用的默认序列化程序(DataContractSerializer)替换为NetDataContractSerializer,它将随每个请求发送类型信息。要使用它,请搜索“wcf netdatacontractserializer”,您将找到如何使用它。

于 2013-07-10T21:46:53.067 回答