2010-06-07 107 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