私は次のように定義された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属性を試してみましたが運がありませんでした。
*更新* この定義は機能します:
<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)
その後、プロキシが適切に生成され、問題は発生しなくなりました。