子类不显示SOAP文档中的继承属性(ASMX Web服务)

时间:2009-05-20 18:30:24

标签: .net web-services inheritance

我正在编写.NET Web服务(VB.NET)。 DisplayChild()方法之一返回Child类型的对象。孩子被定义:

<Serializable()> _
Public Class Child
    Inherits BaseClass
    Property NotInInheritedProperties() as Object
    ...
    End Property
End Class

并且BaseClass看起来像:

<Serializable()> _
Public MustInherit Class BaseClass

    Property BaseProperty() as Object
    ...
    End Property
End Class

但是,在显示DisplayChild()返回的SOAP定义中,输出中显示的唯一属性是NotInInheritedProperties属性。那么我的问题是,如何让BaseClass中的属性显示在SOAP文档中?最初我没有BaseClass上的Serializable属性认为这是问题所在。但是,即使在改变之后它仍然无效。

1 个答案:

答案 0 :(得分:1)

当您通过Web浏览器查看服务时,即使在SOAP定义中未显示BaseProperty,它看起来仍然是WSDL的一部分。如果您查看WSDL(YourService.asmx?WSDL,或者在YourService.asmx上显示“服务描述”的链接),您应该看到BaseClass和Child之间的继承,如:

<s:complexType name="Child">
  <s:complexContent mixed="false">
    <s:extension base="tns:BaseClass">
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="NotInInheritedProperties" />
      </s:sequence>
    </s:extension>
  </s:complexContent>
</s:complexType>
<s:complexType name="BaseClass" abstract="true">
  <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="BaseProperty" />
  </s:sequence>
</s:complexType>

如果您的Web服务的消费者无法看到该属性,那么它可能是他们特定实现的问题(我已经使用了一些“Web服务启用”企业应用程序,这些应用程序在Web服务上完全窒息返回复杂类型)