2010-12-23 25 views
4

所以我們可以說我有這樣的事情:如何導致DataContract類的子類出現在WCF服務的元數據中?

public class Service : IService 
{ 
    public someExposedMethod (someClass param){ 
    //do some stuff 
    } 
} 

[DataContract] 
public class someClass{} 

[DataContract] 
public class someSubClass : someClass {} 

SomeClass的暴露,並且可以在客戶端內進行實例化,但someSubClass永遠不能被實例化和未暴露的某些原因。暴露它的唯一方法似乎將param的類型更改爲someSubClass。這是荒唐的。我該怎麼做呢?我不想要一個基於字符串或其他方法返回實例的方法,我希望客戶和開發人員能夠完全知道他們可以實例化哪些類。

+0

我不能忍受這一點,整個事情依賴於能夠承擔這個最簡單的任務! – Fugu 2010-12-23 16:47:34

+1

一旦涉及到網絡,這個「最簡單的事情」就不那麼簡單了。 – 2010-12-23 16:50:44

回答

8

您不暴露這些類中的任何一個。你的客戶永遠不會實例化它們(除非你分享類型,這是一個不同的故事)。

您正在公開元數據。當執行「添加服務引用」時,它使用該元數據創建一個類似於服務器端類的客戶端類。它看起來足夠像它可以序列化和反序列化表示服務器端類的XML。

如果你想爲子類的元數據被暴露,那麼你需要的[KnownType]屬性添加到操作每個子類:

[DataContract] 
[KnownType(typeof(someSubClass))] 
public class someClass{} 

Known Types

相關問題