2009-05-20 21 views
0

我正在編寫.NET webservice(VB.NET)。其中一種方法DisplayChild()返回一個Child類型的對象。兒童是指:未在SOAP文檔中顯示繼承屬性的子類(ASMX Web服務)

<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 

然而,在SOAP定義,顯示從DisplayChild()在輸出中顯示的唯一屬性的迴歸是NotInInheritedProperties屬性。我的問題是,我如何讓BaseClass中的屬性顯示在SOAP文檔中?最初我沒有BaseClass上的Serializable屬性認爲是問題所在。但是,即使在改變之後,它仍然不起作用。

+0

我最終在其他地方發佈了這個問題,幾周後找到了答案:http://stackoverflow.com/questions/1875642/inherited-properties-do-not-appear-in-soap-sample-on- asmx-file – Grinn 2009-12-09 17:24:16

回答

1

即使您在通過Web瀏覽器查看服務時未在SOAP定義上顯示BaseProperty,它看起來仍然是WSDL的一部分。如果您查看WSDL(?YourService.asmx WSDL,或者鏈接,說「服務說明」上YourService.asmx),你應該看到的BaseClass和兒童,像之間的繼承:

<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服務上)

+0

是的屬性在WSDL中可用。我曾聽過這個詞,但從未讀過。我想當你有一個Web引用並更新它時,它會查看WSDL以獲取在對象瀏覽器中顯示的信息。總是想知道如何工作。 – 2009-05-20 20:43:41