WCF合同對象無法實現2種類型的列表(即:列表和列表)。
囉嗦的解釋:
我對現有的核心繫統之上建立一個WCF服務,我試圖找出實現一些我的業務對象的最佳途徑。
核心系統採用的接口爲所有的業務對象 - 人的管理功能,例如,要求我通過它實現IPerson對象。這裏沒什麼不尋常的。
目標是讓一個聯繫對象(Person)可以在事物的服務端使用,並且還實現IPerson,以便它可以傳遞到核心而不需要轉換層。這一切對於像Person這樣的項目都很好。
問題出現在列表中:例如,核心中的方法可能需要傳入一個IPersonList,而且任何處理繼承泛型的人都知道,List不會從IList繼承。
在我們當前正在運行的ASMX服務,我們在web對象的一些向上/向下鑄造實現這一點。 「WebPerson」將從List繼承,並顯式實現IList,以便IList屬性不會顯示在WSDL上。
在WCF,但是,如果您嘗試使用此相同的對象,您將收到以下錯誤:
Type 'Cssi.IBroker.Service.Cssi.Contracts.PersonList' with CollectionDataContractAttribute attribute is an invalid collection type since it has multiple definitions of interface 'IList`1'.
顯然,現在,新的WCF串行知道如何序列化的IList,它不再能忽略第二個明確的實現。
如果可能的話,我想避免只爲合同創建PersonList對象,然後轉換並從IPersonList對象爲每個呼叫。更改核心業務邏輯以使用專爲WCF服務設計的具體對象不是一種選擇。
幫助!
我應該補充一點,我們已經討論過的另一個選擇是拋出乾淨的WSDL設計,返回服務契約中的接口並將ServiceKnownType屬性添加到我們的契約中。因爲對於這個WCF服務,我們將控制服務和客戶端,這是一個選項,但是這有效地將任何未來的客戶綁定到使用.Net和我們的代理類,因爲我們的WSDL將無效。我寧願避免使用這個選項。 – mdryden