WCF - 复杂对象 - 已知类型

时间:2010-10-27 13:54:41

标签: c# wcf

好的,不太确定怎么说,但会尽力而为。

我有许多WCF服务正在设置和运行,等待一个对象进入处理。

WCFServiceA
WCFServiceB
WCFServiceC

服务A将运行一些处理并决定将对象发送到服务B或C.

所以我的对象在其中的所有类上都有[DataContract]属性,在所有属性上都有[DataMember]。

所以到目前为止一直很好。

但是现在我失去了对象的所有功能,因为现在它基本上是对象的序列化版本。

如果我想使用完整的复杂对象在所有3个服务中包含相同的程序集作为参考并以“KnownTypes”方式发送内容,那么这是最佳实践吗?为使用不知道这些类型的服务的任何东西提供基本的DataContractDataMember,这样他们仍然可以为要运行的服务创建这些对象吗?

希望我有正确的措辞,你在这里理解我的问题。

:编辑: 试着澄清一下。

我发送的对象可以附加一个“策略”,这个策略对象是一个类,可以是几种类型之一,车辆,房屋,生活,宠物政策等。

但是接收服务不会知道实际类型。因此需要KnownTypes。

我想我刚回答了自己的问题!! :)

1 个答案:

答案 0 :(得分:1)

这是对问题的一个很好的解释。我在这种方法中看到的缺点是,如果要更新对象,比如添加新属性或删除一些属性,则需要使用新程序集更新所有3个服务。

如果要根据设置升级实时对象,使用已知类型有时会导致向后兼容性问题。

或者仅使用属性创建DTO(数据传输对象),并将其作为数据协定传递给服务,并将复杂逻辑剥离到可由服务引用的帮助程序类。