在WCF中使用声明的类型

时间:2011-08-04 05:23:23

标签: .net wcf known-types

我在我的WCF接口类中为每个操作契约使用[ServiceKnownType(typeof(Document))]。我想避免使用这个KnownType.Instead使用web.config中的DeclaredTypes。我可以获得有关如何在Web.config文件中配置DeclaredTypes的任何帮助。

1 个答案:

答案 0 :(得分:3)

在配置中添加已知类型的选项仅适用于数据合同,而不适用于服务合同。如果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)添加到传递给它的已知类型。