Создал новый клиент веб-сервиса для web-сервиса axis2 в моем приложении .net. Вызов некоторых методов веб-сервиса. .Net вызывает webservice и читает xml-ответ, но не может десериализовать его. Сгенерированный прокси-код, как правило, для .net, его нормально. wsdl передается соответствие wsi.Consume Axis2 webservice from .net
С wirehark я видел ответ xml очень нормальный. веб-служба является ответом на запрос, но XML-данные кажутся ошибочными. позвольте мне показать те же данные и контракты.
XML-ответ:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:blablaResponse xmlns:ns="http://blabla">
<ns:return type="blablaMessage" xmlns:ax274="http://blabla/xsd" xmlns:ax272="http://blabla/xsd" xmlns:ax271="http://blabla/xsd">
<ax274:blablaNo>1</ax274:blablaNo>
<ax274:blablaNo>2</ax274:blablaNo>
<ax274:blablaNo>3</ax274:blablaNo>
<ax274:blablaDescription>TEXT 1</ax274:blablaDescription>
<ax274:blablaDescription>TEXT 2</ax274:blablaDescription>
<ax274:blablaDescription>TEXT 3</ax274:blablaDescription>
<ax274:statustype="blblaState">
<ax272:textMessage/>
<ax272:code>OK</ax272:code>
</ax274:status>
</ns:return>
</ns:blablaResponse>
</soapenv:Body>
</soapenv:Envelope>
автогенерируемая контракта данных:
<System.Diagnostics.DebuggerStepThroughAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0"), _
System.Runtime.Serialization.DataContractAttribute(Name:="blablaResponse", [Namespace]:="http://blabla"), _
System.SerializableAttribute()> _
Partial Public Class blablaMessage
Inherits Object
Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
<System.NonSerializedAttribute()> _
Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
Private blablaNoField As ServiceReference1.ArrayOf_xsd_int
Private blablaDesriptionField As ServiceReference1.ArrayOf_xsd_string
Private statusField As ServiceReference1.status
<Global.System.ComponentModel.BrowsableAttribute(False)> _
Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData
Get
Return Me.extensionDataField
End Get
Set(value As System.Runtime.Serialization.ExtensionDataObject)
Me.extensionDataField = value
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute(IsRequired:=True)> _
Public Property blablaNo() As ServiceReference1.ArrayOf_xsd_int
Get
Return Me.blablaNoField
End Get
Set(value As ServiceReference1.ArrayOf_xsd_int)
If (Object.ReferenceEquals(Me.blablaNoField, value) <> True) Then
Me.blablaNoField = value
Me.RaisePropertyChanged("blablaNo")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute(IsRequired:=True)> _
Public Property blablaDescription() As ServiceReference1.ArrayOf_xsd_string
Get
Return Me.blablaDesriptionField
End Get
Set(value As ServiceReference1.ArrayOf_xsd_string)
If (Object.ReferenceEquals(Me.blablaDesriptionField, value) <> True) Then
Me.blablaDesriptionField = value
Me.RaisePropertyChanged("blablaDescription")
End If
End Set
End Property
<System.Runtime.Serialization.DataMemberAttribute(IsRequired:=True)> _
Public Property status() As ServiceReference1.IslemSonucu
Get
Return Me.statusField
End Get
Set(value As ServiceReference1.IslemSonucu)
If (Object.ReferenceEquals(Me.statusField, value) <> True) Then
Me.statusField = value
Me.RaisePropertyChanged("status")
End If
End Set
End Property
Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Sub RaisePropertyChanged(ByVal propertyName As String)
Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
If (Not (propertyChanged) Is Nothing) Then
propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
End If
End Sub
End Class
Пробовал wsdl.exe svcutil.exe с некоторыми различными параметрами, вот и все не удалось. Кажется, проблема с сериализацией с осью 2, потому что разные типы элементов в одном и том же родителе xml. Например, blablaNo и blablaDescription.
Как я могу решить эту проблему. Благодарю.
Поставщик услуг никогда не меняет свой собственный сервисный уровень, код и т. Д. Blabla - это моя строка замены. Спасибо –
Тогда я думаю, вам нужно будет создать собственный десериализатор XML. Просто загрузите как обычные узлы, как вы собираетесь заполнить древовидную структуру, а затем просто вырезать ствол до тех пор, пока сообщения не останутся единственными оставленными – Franck
это плохо для меня, слишком много операций и контрактов, найденных в сервисе. спасибо –