【问题标题】:Remote server returned an error 500 - Error while calling a soap webservice远程服务器返回错误 500 - 调用肥皂网络服务时出错
【发布时间】:2015-04-11 14:21:45
【问题描述】:

我正在尝试通过 POST 方法调用网络服务。输入 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()

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

这是来自网络服务的实际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 服务的引用时,这工作得很好,但我不需要使用此方法。

如果我遗漏了什么,请提出建议!

【问题讨论】:

  • 不要使用 WebRequest/WebResponse。硒“How to Consume a Web Service
  • 我正在使用 .NET 2.0,需要从服务器端代码调用此 Web 服务。
  • 所以使用“添加 Web 引用”。另外,.NET 2.0 是什么?十岁?您不得有任何竞争对手。
  • 我已经尝试过网络参考,这很有效,但我不必使用网络参考,因为我的项目有一些用于此任务的通用组件。代码已经写在那里了。
  • 您收到的异常意味着服务器不喜欢您发送的内容。根据它发回的错误,它不喜欢你的&lt;CONTACT&gt; 元素。

标签: web-services soap soap-client


【解决方案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>

&lt;faultcode&gt;soap:Client&lt;/faultcode&gt; - 问题来自客户端,即客户端输入。

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

此错误表明我们正在为元素 &lt;CONTACT&gt; 传递空白 uri。这里的uri代表&lt;CONTACT&gt;标签的命名空间,应该在相应操作的服务wsdl中可用。这个元素在这里被称为 LOCAL,因为服务在 wsdl 中没有关于这个标签的信息,它试图找到这个元素的命名空间。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多