WCF对象,多个IList实现和序列化错误

时间:2010-01-07 17:15:54

标签: wcf serialization service interface soa

问题:

WCF合同对象无法实现2种类型的列表(即:列表和列表)。

冗长的解释:

我正在现有核心系统之上构建WCF服务,我正在努力找出实现某些业务对象的最佳方法。

核心系统利用所有业务对象的接口 - 例如,人员管理功能要求我传入一个实现IPerson的对象。这里没什么不寻常的。

目标是拥有一个可以在服务端使用的联系对象(Person),并实现IPerson,以便可以将其传递到核心而无需转换层。这一切对于像Person这样的项目都很好。

问题出现在列表中:例如,核心中的方法可能需要传入IPersonList,并且任何处理继承泛型的人都知道,List不会从IList继承。

在我们当前运行的ASMX服务中,我们通过Web对象中的一些向上/向下转换实现此功能。 “WebPerson”将继承自List,并显式实现IList,以便IList属性不会出现在WSDL上。

但是,在WCF中,如果尝试使用同一个对象,则会出现以下错误:

  

使用CollectionDataContractAttribute属性输入'Cssi.IBroker.Service.Cssi.Contracts.PersonList'是一种无效的集合类型,因为它有多个接口'IList`1'的定义。

显然,既然新的WCF序列化器知道如何序列化IList,它就不再能够忽略第二个显式实现。

如果可能的话,我想避免为契约创建一个PersonList对象,然后为每个调用转换为IPersonList对象。更改核心业务逻辑以使用专为WCF服务设计的具体对象不是一种选择。

帮助!

1 个答案:

答案 0 :(得分:0)

我最终确定最佳路线是一组仅用于合同的专用物品。由于他们专注于一项任务,我能够保持清洁,而不必为了WSDL而牺牲我的内部设计。对于WSDL对象本身,我最终使用数组而不是IList。

转换的额外步骤有点麻烦,但不如试图保持我的核心对象WCF友好。