2011-04-09 45 views
0

目的WCF DataContractSurrogate不同的非遺傳類型

要動態公開爲具有未知的枚舉類型的服務的RSS/ATOM端點。該類型將通過反射發現以構建聯合終結點。

方法

我使用.NET 4.0

我反映了一個dll揭露端點,即JSON,XML,SOAP。這一切都按我希望的那樣工作。 (因此,我使用代碼來配置我的WCF設置)。

我現在正在試圖揭露了通過反射通過我的服務公開,這樣我可以公開每個方法返回一個ICollection的一個SyndicationFeed發現所有的ICollection一個RSS端點。

我相信,我想用一個datascontractsurrogate,並遵循什麼MSDN有對這個補充。我已經連接了我的datacontractsurrogate,並且我觀察到它正在我的調試點內的代理。

我從svclog觀衆收到以下異常:

異常類型:

System.Runtime.Serialization.InvalidDataContractException, System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

消息:

Using surrogates with get-only collection properties is not supported. Consider removing the surrogate associated with 'System.Collections.Generic.Dictionary`2[[System.Xml.XmlQualifiedName, System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'. 

問題

  1. 概念什麼是我對 選項實現我想acheive什麼?
  2. 我能保持輸出SyndicationFeed類型,而不是選擇寫即席爲XML字符串的類型安全的方法嗎?

回答

1

你爲什麼surrogating字典有關係嗎?例如,我不明白爲什麼你的方法不只是返回一個對象,甚至不僅僅是返回一個ICollection,所以你使用你想要的任何DLL類型多態地返回你想要的任何對象。

不知道這種情況下,我想建議您也嘗試DataContractResolver。見this blog postthis sample,並且the MSDN page上手。它基本上可以幫助您將一種類型映射到線路上不同的xsi:type表示,這可能是您想要的。

您確定您已經用盡了所有關於已知類型的選項嗎?請參閱this blog post以獲得有關該主題的全面處理。