использование заявленных типов в WCF - PullRequest
3 голосов
/ 04 августа 2011

Я использую [ServiceKnownType(typeof(Document))] для каждого контракта операции в моем классе интерфейса WCF. Я хочу избегать использования этого KnownType. Вместо этого используйте DeclaredTypes в web.config.Могу ли я получить какую-либо помощь по настройке DeclaredTypes в файле Web.config.

1 Ответ

3 голосов
/ 08 августа 2011

Возможность добавления известных типов в конфигурации применяется только к договорам данных, но не к договорам на обслуживание.Если тип, из которого происходит Document, всегда один и тот же (а не System.Object), вы можете сделать это, используя опцию конфигурации (больше информации на MSDN ), которая будет выглядеть примерно так:

<configuration>
  <system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
        <add type="MyNamespace.DocumentBase, MyAssembly, Version=...">
          <knownType type="MyNamespace.Document, MyAssembly, Version=..."/>
        </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>
</configuration>

Если это не применимо, то другим вариантом будет передать эту опцию конструктору DataContractSerializer, что можно сделать с помощью некоторого поведения, которое можно применить ко всему сервису.Сообщение о замене DataContractSerializer на NetDataContractSerializer является хорошей отправной точкой для вас (вместо замены сериализатора просто верните другой экземпляр DataContractSerializer, но всегда добавляйте typeof(Document) к переданным ему известным типам.

...