相关疑难解决方法(0)

WCF:配置已知类型

我想知道如何在WCF中配置已知类型.例如,我有一个Person类和一个Employee类.该员工类是的sublass 类.这两个类都标有[DataContract]属性.

我不想硬编码类的已知类型,比如[ServiceKnownType(typeof(Employee))]在Person类中放置一个,以便WCF知道Employee是Person的子类.

现在,我在主机的App.config中添加了以下XML配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
        <add type="Person, WCFWithNoLibrary, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null">
          <knownType type="Employee, WCFWithNoLibrary, Version=1.0.0.0,Culture=neutral, PublicKeyToken=null" />
        </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>
  <system.serviceModel>
    ....... 
  </system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我编译它,运行主机,在客户端添加服务引用并添加一些代码并运行客户端.但是发生了错误:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数时出错 http://www.herbertsabanal.net:person.InnerException消息是'第1行位置错误247.元素 'http://www.herbertsabanal.net:person' 包含'http://www.herbertsabanal.net/Data:Employee' 数据协定的 数据.反序列化器不知道映射到此合同的任何类型.将与"Employee"对应的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中.有关更多详细信息,请参阅InnerException.

以下是数据合同:

[DataContract(Namespace="http://www.herbertsabanal.net/Data", Name="Person")]
    class Person
    {
        string _name;
        int _age;

        [DataMember(Name="Name", Order=0)]
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        } …
Run Code Online (Sandbox Code Playgroud)

wcf wcf-configuration

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

wcf ×1

wcf-configuration ×1