WCF DataContractSurrogate с разными не унаследованными типами - PullRequest
0 голосов
/ 09 апреля 2011

Aim

Для динамического предоставления конечной точки RSS / Atom для службы с неизвестным перечисляемым типом. Тип будет найден с помощью отражения для построения конечных точек синдикации.

подход

Я использую .net 4.0

Я размышляю над dll, чтобы выставить конечные точки, то есть json, xml, soap. Это все работает так, как я хочу. (Таким образом, я использую код для настройки моей настройки WCF).

Сейчас я пытаюсь предоставить конечную точку rss для всей коллекции ICollection, найденной через отражение, предоставляемое через мои службы, чтобы я мог предоставить SyndicationFeed для каждого метода, возвращающего ICollection.

Я полагаю, что хочу использовать суррогат данных и следовал тому, что msdn должен добавить к этому. Я подключил свой дата-контрактсуррогат и заметил, что он попадает в точки отладки внутри суррогата.

Я получаю следующее исключение из средства просмотра 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?

1 Ответ

1 голос
/ 16 апреля 2011

Почему вы используете суррогатный словарь?Я не понимаю, почему ваш метод, например, не просто возвращает Object или даже просто ICollection как есть, поэтому вы полиморфно возвращаете любой объект, который хотите, используя любой тип DLL, который вы хотите.Я хочу порекомендовать вам также попробовать DataContractResolver.См. этот блог , этот образец и страницу MSDN , чтобы начать.По сути, это помогает вам сопоставить один тип с другим представлением xsi: type на проводе, что может быть всем, что вам нужно.

Вы уверены, что исчерпали все свои варианты в отношении известных типов?См. это сообщение в блоге для более детального рассмотрения темы.

...