Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.net使用Axis2 Web服务_C#_Web Services_Soap_Wsdl_Axis2 - Fatal编程技术网

C# 从.net使用Axis2 Web服务

C# 从.net使用Axis2 Web服务,c#,web-services,soap,wsdl,axis2,C#,Web Services,Soap,Wsdl,Axis2,在我的.net应用程序上为axis2 webservice创建了一个新的web服务客户端。调用Web服务的某些方法。Net正在调用webservice并读取xml响应,但无法对其进行反序列化。生成的代理代码通常用于.net,可以。wsdl被传递给wsi遵从性 使用wireshark,我看到xml响应非常正常。web服务正常响应请求,但xml数据似乎有误。让我展示相同的数据和合同 xml响应: <soapenv:Envelope xmlns:soapenv="http://schemas.x

在我的.net应用程序上为axis2 webservice创建了一个新的web服务客户端。调用Web服务的某些方法。Net正在调用webservice并读取xml响应,但无法对其进行反序列化。生成的代理代码通常用于.net,可以。wsdl被传递给wsi遵从性

使用wireshark,我看到xml响应非常正常。web服务正常响应请求,但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和一些不同的参数,但全部失败。axis2似乎存在序列化问题,因为同一xml父级中有不同类型的元素。 例如Blano和blablaDescription


我怎样才能解决这个问题。谢谢。

根据您的XML响应显示,这很奇怪,blablaNo对我来说不是int数组,但我将其理解为3个int变量,它们似乎没有可区分的名称。 我从未见过XML格式是这样的,但我以前也从未使用过Java服务输出

你知道,如果我是你,我会尝试将Axis服务的输出更改为JSON。首先它会更小,其次它会完全消除输出格式上的混乱。在.net中反序列化JSON非常容易

下面是一个非常简单的例子,我目前正在处理3种不同的服务通信,以及PHP页面和.Net桌面应用程序

internal class CFingerPrint
{
    public string WanIP;
    public string MacAddress;      

    public string getClassEncrypted()
    {
        return new JavaScriptSerializer().Serialize(this);
    }

    public CFingerPrint getClassDecrypted(string sSerializedClass)
    {
        return new JavaScriptSerializer().Deserialize<CFingerPrint>(sSerializedClass);
    }
}

在JSON中,基本属性不需要到处都有花哨的属性。除非您返回自定义对象,否则您应该不会有问题。

publisher将发送到新的wsdl文件,问题已得到解决。

服务提供商从不更改自己的服务层、代码等。blablabla是我的替换字符串。谢谢,我认为您需要一个自己制作的XML反序列化程序。简单地加载为普通节点,就像你将填充一个树状视图,然后简单地剪切主干,直到消息是唯一剩下的东西。这对我来说是不好的,在服务中发现了太多的操作和契约。谢谢,我试了几次,什么也做不到。除非我手动解析,否则我尝试的一切都会失败。您得到的响应不是有效的XML格式。似乎创建此输出的任何内容都是由不关心XML标准的人或库手动创建的