2012-09-26 38 views
2

我已經一個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)

則生成代理正確和我不再有問題。

+0

您可以顯示WSRetrieveAccountProfile類的工作和不工作的定義嗎? –

+0

完成:cnage簡單地添加一個字符串變量。我沒有做任何事情,但似乎解決了我遇到的問題。我開始認爲它可能是Microsoft Visual Web Developer 2010 Express造成的,因爲WSDL和其他變量定義沒有區別。 – George

+2

有趣的是,當類不工作時,這個類的唯一公共屬性是一個整數列表,所以編譯器認爲它會很聰明,並簡化爲一個整數數組,而不是創建一個自定義類型。 –

回答

1

變化

<XmlElement(IsNullable:=False)> Public accountNumber As List(Of Integer)

<XmlArray(IsNullable:=True)> Public accountNumber As List(Of Integer)

修復代理生成。

相關問題