我已經一個WebService定義爲這樣:web服務具有輸入類別參數將其轉換爲一個數組
<WebMethod(Description:="Retrieve a list of account profiles.")> _
<System.Web.Services.Protocols.SoapHeader("MyHeader")> _
Public Function RetrieveAccountProfile(<XmlElement(IsNullable:=True, Type:=GetType(WSRetrieveAccountProfile))> ByVal myAccount As WSRetrieveAccountProfile) As <XmlElement(IsNullable:=True)> WSResponseRetrieveAccountProfile
...
我傳遞作爲輸入參數WSRetrieveAccountProfile
類的定義如下:
<Serializable()> _
<XmlType(Namespace:="http://mynamespace/", TypeName:="WSRetrieveAccountProfile")> _
Public Class WSRetrieveAccountProfile
<XmlElement(IsNullable:=False)> Public accountNumber As List(Of Integer)
Public Sub New()
End Sub
Public Function Validate() As Boolean
'Validations here
Return True
End Function
End Class
問題:我使用Web服務,我正在客戶端工作,我試圖聲明WSRetrieveAccountProfile
類型的對象,因此我可以在調用Web服務時將其作爲輸入參數傳遞,但是出現編譯錯誤 - 它無法識別類型。
檢查Reference.vb後,我注意到該函數的輸入參數是整數ByVal myAccount() As Integer
的普通數組。現在,如果我將另一個變量添加到WSRetrieveAccountProfile
類定義ByVal myAccount() As Integer
突然更改爲ByVal myAccount As WSRetrieveAccountProfile
並且問題已解決。
如何解決這個問題,而不添加一個不必要的變量?我嘗試用XmlType屬性沒有運氣。
* UPDATE * 這個定義的工作原理:
<Serializable()> _
<XmlType(Namespace:="http://mynamespace/", TypeName:="WSRetrieveAccountProfile")> _
Public Class WSRetrieveAccountProfile
<XmlElement(IsNullable:=False)> Public accountNumber As List(Of Integer)
<XmlElement(IsNullable:=True)> Public TEST As String
Public Sub New()
End Sub
Public Function Validate() As Boolean
'Validations here
Return True
End Function
End Class
*更新 - 解*
如果我改變 <XmlElement(IsNullable:=False)> Public accountNumber As List(Of Integer)
到 <XmlArray(IsNullable:=True)> Public accountNumber As List(Of Integer)
則生成代理正確和我不再有問題。
您可以顯示WSRetrieveAccountProfile類的工作和不工作的定義嗎? –
完成:cnage簡單地添加一個字符串變量。我沒有做任何事情,但似乎解決了我遇到的問題。我開始認爲它可能是Microsoft Visual Web Developer 2010 Express造成的,因爲WSDL和其他變量定義沒有區別。 – George
有趣的是,當類不工作時,這個類的唯一公共屬性是一個整數列表,所以編譯器認爲它會很聰明,並簡化爲一個整數數組,而不是創建一個自定義類型。 –