目标
为具有未知可枚举类型的服务动态公开RSS / Atom端点。该类型将通过反射找到,以构建联合终点。
方法
我正在使用.net 4.0
我正在反映一个dll暴露端点,即json,xml,soap。这一切都按我的意愿行事。 (因此,我使用代码来配置我的WCF设置。)
我现在正尝试通过我的服务公开的反射公开所有ICollection的rss端点,这样我就可以为每个返回ICollection的方法公开一个SyndicationFeed。
我相信我想使用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]]'.
问题
答案 0 :(得分:1)
你为什么要代替词典呢?我不明白为什么你的方法,例如,不仅仅返回一个Object,甚至只返回ICollection,所以你使用你想要的任何DLL类型多态返回你想要的任何对象。
如果不进一步了解这种情况,我建议您也尝试使用DataContractResolver。请参阅this blog post,this sample和the MSDN page以开始使用。它本质上可以帮助您将一种类型映射到线上不同的xsi:type表示,这可能就是您想要的。
您确定已经用尽所有关于已知类型的选项吗?有关该主题的详尽处理,请参阅this blog post。