2010-03-16 52 views
21

我有一個服務,返回一個動物數組,但列表可以包含貓,狗等,這一切都可以擴展動物。我知道我需要分別使用KnownType或ServiceKnownType屬性,以及實體類或服務類。使用KnownType和ServiceKnownType時,WCF有什麼區別?

2個屬性之間有什麼區別?我更喜歡使用ServiceKnownType,因爲它在服務上應用,恰好在需要和需要的地方,而不是在我的實體上應用的KnownType。對我來說,將它應用於實體類意味着知道我的實體類如何被使用。

現在我已經把它放在我的實體上了,它的功能就像是一種魅力,但我在這裏尋找最佳實踐和有用的指導。

回答

39

他們最終做同樣的事情 - 但在不同的範圍。

[ServiceKnownType]爲此服務上的所有方法或服務上的單個方法(取決於您放置該屬性的位置)定義了一個類層次結構。因此,在這種情況下,此類型層次結構僅適用於此服務,或者可能只是該服務合同中的單個方法。

[KnownType]做同樣的事情 - 但基礎數據合同。任何將使用此數據合約的服務現在也「繼承」所有這些潛在的後代類 - 這可能會或可能不是您想要的。

所以真的 - 這只是你想要應用給定聲明的範圍的問題 - 將它放在數據合同上使其成爲「全局」類型的hiearchy,而使用[ServiceKnownType]則允許您定義有效的僅適用於一個服務合同,或者甚至僅僅是該服務合同中的一個(或幾個)方法。

+0

謝謝。這就是我的想法,我將把它放在操作合同層面。 – 2010-03-16 17:25:47

+0

順便說一句 - 我將馬特的答案標記爲接受的答案是因爲他提供的鏈接更深入。儘管我確實喜歡你的回答 - 用較少的話說。 – 2010-03-16 17:27:41

+0

看起來像其他答案被刪除.... – 2017-01-30 10:27:05

相關問題