回答
嘗試通過IList<T>
對於基於WCF的服務並不合適。
WCF根據數據契約進行對話,定義服務或客戶端期望發送和接收的數據的形狀。這些合約必須足夠具體,以便序列化程序知道如何將它們轉換爲XML,JSON和其他表示形式。
當你把一個像IList<T>
這樣的接口放入你的服務合約中時,你沒有給序列化程序足夠的有關指定形狀數據的信息。你關心的只是發送IList<T>
部分的實現嗎?你是否對實現接口的東西中包含的其他有狀態數據感興趣?序列化程序無法知道。
最簡單的解決方案是在WCF中使用基本的數據傳輸對象。這些都是簡單的類,它們只具有表示要通過媒體傳輸信息的工作。這些類僅包含具體類型,並且很容易被序列化程序理解。當你想發送消息時,你可以創建這些對象的實例並用數據填充它們。
對於您的示例,創建List<T>
而不是IList<T>
,並在將值傳遞到服務之前將其複製到列表中。一個簡單的方法是使用Enumberable.ToList<T>()
擴展方法。
串行器需要知道具體的類型,以便與註釋[ServiceKnownType],所以它知道可以使用什麼類型的IList的
更新合同:對象不幫助儘可能串行仍然沒有按」不知道該怎麼做 - 你需要使用[ServiceKnownType]來告訴它 - 你可以在這裏提供一個方法,如果你不想在編譯時顯式地返回類型列表
你需要使用泛型並標記它是什麼類型的列表,以便服務知道該期待什麼。一種方法可以是這樣的:
public IList<Something> GetSomething()
這麼說,我這樣做時,我往往不是僅僅因爲有讀書遲代碼究竟是什麼回事返回(做一個非WCF時少猜測返回數組客戶端在另一端爲它創建一個IList類還是將它轉換成其他東西?)。一切都知道數組是什麼。
我可以使用此類似:公共IList的
當然,如果你希望人們在另一端得到的是Object。但是由於Object沒有數據,這可能不是你想要的。 :)如果你更具體地說明一種方法將要發回的東西,這個東西效果最好。 – Tridus
除了使用列表類型
的概念 - 爲什麼不只是使用數組?
數組似乎是最明顯的選擇,因爲它是與IEnumerable的兼容,客戶端可以使用自己的擴展方法
- 1. 如何通過服務發送通知
- 2. 如何將IList發送給WCF
- 3. 如何通過WCF Web服務序列化和發送MailMessage?
- 4. 如何通過WCF休息服務向Kindle Fire發送推送通知
- 5. 如何通過Web服務發送ArrayList?
- 6. WCF RIA發送服務器通知
- 7. 如何通過ksoap2-android發送複雜類型到wcf服務? - 如何配置wcf服務?
- 8. 如何發送XmlDocument到WCF服務?
- 9. 如何發送對象到wcf服務?
- 10. 通過HTTP發佈到WCF服務
- 11. 通過鏈接發現WCF服務
- 12. 通過WCF服務調用發送Windows憑據
- 13. 通過URL發送WCF服務請求和參數
- 14. HTTP/1.1 202(接受)通過HTTPS發送到WCF服務
- 15. WCF。通過服務和客戶端發送數據
- 16. 通過3G向WCF服務發送POST請求
- 17. 通過WCF休息服務發送大文件(> 10 MB)
- 18. 通過WCF發送XML?
- 19. 通過WCF發送數據
- 20. 通過WCF Web服務
- 21. WCF服務通過TimeZoneInfo
- 22. WCF如何將用戶名令牌發送到WCF服務
- 23. 發佈到WCF服務發送空值
- 24. 服務器通過AFNetworking發送事件
- 25. 通過HttpWebRequest發送對象(REST服務)
- 26. 通過web服務發送文件
- 27. 通過web服務發送圖像
- 28. Wcf向xamarin客戶端發送服務推送通知
- 29. 如何通過URI引用WCF Web服務/如何通過URI將WCF服務POST?
- 30. 如何通過MYSQL通過WCF服務插入操作?
謝謝你英雄的好回答。 –