2010-06-07 70 views
4

我有一个WCF服务,并且必须将接口公开为datacontract。接口有两个派生类。 WCF服务将返回派生类型的对象。客户端必须将其转换为派生类。这在客户端是否可行?我的方法应该是什么?WCF接口和派生类

回答

6

如果你已经派生类,你需要“通告”这些数据合同:

[DataContract] 
[KnownType(typeof(DerivedType1))] 
[KnownType(typeof(DerivedType2))] 
public class BaseType 
{ 
    ......  
} 

,或者您也可以指定这些类型的关系对一个服务合同:

[ServiceKnownType(typeof(DerivedType1))] 
[ServiceKnownType(typeof(DerivedType2))] 
[ServiceContract()] 
public interface IService 
{ 
    [OperationContract] 
    BaseType GetItems(); 
} 

查看Data Contract Known TypesService Known Types上的MSDN文档以获取更多背景信息。

+0

在你的例子中BaseType是一个类,我正在问关于接口。接口可以吗?我知道knowntype与类一起工作,但它可以与接口一起工作吗? – Prashant 2010-06-07 19:50:35

+0

@Prashant:不,WCF需要具体类 - 只有那些可以在客户端和服务器之间传输数据所需的XML模式中表达 – 2010-06-07 20:58:05