在WCF中,数据协定类可以相互继承吗?

Jor*_*mer 24 .net wcf contract

在WCF服务中,我有两个具有[DataContract]属性的类.其中一个类与另一个类具有"is-a"关系 - 因此类B可以从类A继承.但是,当我在这两个类之间配置继承时,两者都用[DataContract]属性表示,元数据无法加载在测试服务时.

这可能在WCF中吗?我错过了另一个属性吗?

[DataContract]
public class A
{        
    [DataMember]
    public MyCustomType AValue1{ get; set; }

    [DataMember]
    public MyCustomType AValue2 { get; set; }
}

[DataContract]
public class B: A
{       
   [DataMember]
   public double BValue1{ get; set; }

   [DataMember]
   public double BValue2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

注意:还使用数据协定定义自定义类型.

更新:以下是错误:

错误:无法从http:// localhost:8002/GISDataServices/mex获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布.有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455上的MSDN文档.WS- Metadata Exchange错误URI:http:// localhost:8002/GISDataServices/mex元数据包含无法解析的引用:' http:// localhost:8002/GISDataServices/mex '. __CODE__由于内部错误,服务器无法处理请求.有关错误的更多信息,请在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自<serviceDebug>配置行为),以便将异常信息发送回客户端,或者根据Microsoft .NET Framework打开跟踪3.0 SDK文档并检查服务器跟踪日志.HTTP GET错误URI:http:// localhost:8002/GISDataServices/mex 下载' http:// localhost:8002/GISDataServices/mex '时出错.请求失败,HTTP状态为400:错误请求.

更新2:请参阅下面的答案.

Dav*_*ton 39

是的,但您需要使用[KnownTypeAttribute]使用派生类的类型构造它来装饰基类.例如:

[DataContract]
[KnownType(typeof(B))]
public class A
{
   [DataMember]
   public string Value { get; set; }
}

[DataContract]
public class B : A
{
   [DataMember]
   public string OtherValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是互操作性吗?如果对方对继承一无所知会怎么样? (2认同)

Jor*_*mer 7

好的,我想出了问题.答案是......我是个白痴.它与继承无关.在基类中,我有一个没有'set'属性子句的数据契约成员 - 只有'get'.卫生署!加入'set'条款使它像魅力一样工作.

对困惑感到抱歉.