好吧,不太確定怎麼說,但會盡我所能。WCF - 複雜對象 - 已知類型
我有很多的WCF服務,這是建立和運行,等待的對象進來進行處理。
WCFServiceA
WCFServiceB
WCFServiceC
服務A將運行某些處理,並決定該對象發送到服務B或C.
所以我的對象具有在它和在所有屬性的所有類[數據成員] [DataContract]
屬性。
到目前爲止這麼好。
但現在我也從我的對象失去所有的功能,因爲這是現在基本對象的序列化版本。
因此,如果我想使用一個完整的複雜對象在所有3個服務中包含相同的程序集作爲參考並以「KnownTypes
」的形式發送對象,那麼最佳實踐是什麼?爲使用不知道這些類型的服務的任何東西提供基本的DataContract
和DataMember
,以便它們仍然可以創建這些對象以供服務運行?
希望我的措辭正確,你明白我的問題在這裏。
:編輯: 要嘗試和澄清。
我送可以附加給它的「政策」的對象,這一政策對象是類,可以分爲幾種類型,車輛,房屋,生活,寵物政策等
但實際的一個類型將不會被接收服務知道。因此需要KnownTypes。
我想我只是回答了我自己的問題! :)
我不太清楚你的問題,但KnownType用於指示到串行的實體polymorphicism是可以預期的。 http://msdn.microsoft.com/en-us/library/ms730167.aspx。如果你能避免多態對象那麼好。使用[KnownType]裝飾在客戶端和服務器之間共享實體程序集肯定有效 - 另一種方法是在反序列化期間將已知類型添加到客戶端。 – StuartLC 2010-10-27 14:07:15
我不完全理解你的評論....多態是重載方法,所以我們可以調用多個簽名相同的方法,通過線路發送的對象被序列化爲值類型的對象,沒有簽名方法不發送。 (我甚至不認爲這是可能的)。 – jimplode 2010-10-27 14:17:21
您是否在服務中使用了相同的數據合約程序集,或者您是否生成了這些程序集? (即是否使用重用類型功能) – 2010-10-27 14:24:12