WCF接口和派生类

WCF接口和派生类,wcf,Wcf,我有一个WCF服务,必须将接口公开为datacontract。接口中有两个派生类。 WCF服务将返回派生类型的对象。客户端必须将其转换为派生类。这在客户端是可能的吗?我的方法应该是什么 如果您有派生类,则需要在数据协定上“公布”这些类: [DataContract] [KnownType(typeof(DerivedType1))] [KnownType(typeof(DerivedType2))] public class BaseType { ...... } [Servic

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

如果您有派生类,则需要在数据协定上“公布”这些类:

[DataContract]
[KnownType(typeof(DerivedType1))]
[KnownType(typeof(DerivedType2))]
public class BaseType
{
   ......    
}
[ServiceKnownType(typeof(DerivedType1))]
[ServiceKnownType(typeof(DerivedType2))]
[ServiceContract()]
public interface IService
{
    [OperationContract]
    BaseType GetItems();
}
或者,您也可以在服务合同中指定此类关系:

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

有关更多背景信息,请查看MSDN文档。

在您的示例中,BaseType是一个类,我询问的是接口。有接口吗?。我知道knowntype与类一起工作,但它与接口一起工作吗?@Prashant:不,WCF需要具体的类-只有那些可以用XML模式表示,这是在客户端和服务器之间传输数据所需要的