0

目标

为具有未知可枚举类型的服务动态公开 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]]'.  

问题

  1. 从概念上讲,我有哪些选择来实现我想要实现的目标?
  2. 我可以保持一种类型安全的方式来输出 SyndicationFeed 类型,而不是选择将 adhoc 写入 xml 字符串吗?
4

1 回答 1

1

不过,你为什么要代理字典?我不明白为什么你的方法,例如,不只是返回一个 Object 甚至是 ICollection,所以你使用任何你想要的 DLL 类型多态地返回你想要的任何对象。

在不进一步了解这种情况的情况下,我想建议您也尝试使用 DataContractResolver。请参阅此博客文章此示例MSDN 页面以开始使用。它本质上可以帮助您将一种类型映射到线路上的不同 xsi:type 表示,这可能就是您想要的。

你确定你已经用尽了关于已知类型的所有选项吗?有关该主题的全面处理,请参阅此博客文章

于 2011-04-16T03:24:46.133 回答