远程服务器返回错误500 - 调用soap webservice时出错

时间:2015-04-11 14:21:45

标签: web-services soap soap-client

我试图通过POST方法调用web服务。输入xml是rpc / literal soap消息。

    Dim myRequest As Net.HttpWebRequest
    Dim objResponse As Net.HttpWebResponse
    Dim result As String
    Dim data As Byte()
    Dim newStream As System.IO.Stream

    Dim strURL As String = "https://abxxxx"
    strXml.Load("D:\MyXml.xml")

    data = System.Text.Encoding.ASCII.GetBytes(strXml.InnerXml)
    myRequest = WebRequest.Create(strURL)
    myRequest.Method = "POST"
    myRequest.ContentType = "application/x-www-form-urlencoded"
    myRequest.ContentLength = data.Length
    myRequest.Timeout = 125000
    newStream = myRequest.GetRequestStream()
    newStream.Write(data, 0, data.Length)
    newStream.Close()
    objResponse = myRequest.GetResponse()
    Dim sr As IO.StreamReader = New IO.StreamReader(objResponse.GetResponseStream())
    strOutput = sr.ReadToEnd()
    'Close connections
    sr.Close()
    objResponse.Close()

代码抛出异常"远程服务器返回错误:500"在objResponse = myRequest.GetResponse()

这是来自Web服务的实际soap响应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: unexpected element (uri:"", local:"CONTACT"). Expected elements are (none) </faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>

当我使用visual studio(代理类)添加对此Web服务的引用时,这非常有效,但我不需要使用此方法。

请告知我是否遗漏了某些东西!

1 个答案:

答案 0 :(得分:1)

在花了一些时间分析和研究我的服务的wsdl之后,我找到了解决这个问题的方法。

我们需要为所有那些在WSDL中没有直接公开的xml节点使用CDATA(即常量数据),因此这个标签应该作为文本发送到服务。此标记位于wsdl中定义的父标记下。我申请CDATA将这些信息发送到我的soap xml中。

<PARENT><![CDATA[<CONTACT>abcd </CONTEXT>]]></PARENT>

我发现了一些有关错误500的有用信息 - 远程服务器返回错误 - 此错误从服务中重现,可能有很多原因。为了得到错误的确切原因,我们需要服务的实际响应作为故障代码和故障字符串。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: unexpected element (uri:"", local:"CONTACT"). Expected elements are (none) </faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>

<faultcode>soap:Client</faultcode> - 问题来自客户,即客户输入。

<faultstring>Unmarshalling Error: unexpected element (uri:"", local:"CONTACT"). Expected elements are (none) </faultstring>

此错误表明我们正在为元素<CONTACT>传递空白uri。 uri here表示<CONTACT>标记的名称空间,该标记应该在相应操作的服务wsdl中可用。此元素在此处称为LOCAL,并且由于服务在wsdl中没有关于此标记的信息,因此它尝试查找此元素的命名空间。

希望这可以帮助更多人面对同样的问题。