我正在编写.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属性认为这是问题所在。但是,即使在改变之后它仍然无效。
答案 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服务上完全窒息返回复杂类型)