若用 wcftestclient 工具測試的話,甚至會跟你說,可能是configuration的問題,乍看之下,就笨笨的去找EndPoint, Proxy, Binding....等等的問題,花了大半天,最後發現問題是出現在Contract這一環。
以我的例子來說,要return給WCF Client的是「自訂物件」,又由於懶得寫DataContract,所以大多都用WCF的預設序列化動作去做,大多也都是POCO型態,因為某些因素,此method回傳的自訂物件必需增加「屬性」,加了這些屬性後就有這狀況,而該屬性是另一個自訂Type,由於該Type並無法以預設的序列化動作做序列化,因此造成了這個錯誤。
但是給的Exception訊息裡,看不出來任何跟「序列化」相關的keyword,Stack Trace也都是Channel、Proxy之類的字眼,所以下次遇到此狀況又無從下手時,可以試著去看看最終回傳的type,對於序列化所該做的Contract定義是否完整。
參考連結:
- MSDN: 使用資料合約
- MSDN: 可序列化的型別 (DataContractSerialize)
- 資料合約 (Data Contracts)
- 資料合約 (Data Contracts) - enum
- WCF中因序列化問題引起的異常和錯誤
- WCF解析錯誤
*在此推薦及感謝史帝芬心得筆記這個blog,有很多關於WCF的文章值得參考學習。
沒有留言:
張貼留言