2015-04-11 19 views
1

Я пытаюсь вызвать веб-сервис методом POST. Ввод xml - это сообщение с мылом rpc/literal.Удаленный сервер возвратил ошибку 500 - Ошибка при вызове soap webservice

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()

Это фактический ответ мыло от веб-сервиса:

<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 (прокси-класса), но мне не нужно использовать этот метод.

Пожалуйста, предложите, если я что-то упустил!

+0

Не используйте WebRequest/WebResponse. Se "[Как использовать веб-службу] (https://johnwsaunders3.wordpress.com/2009/05/17/how-to-consume-a-web-service/)" –

+0

Я использую .NET 2.0 и нуждаюсь для вызова этой веб-службы из кода на стороне сервера. –

+0

Итак, используйте «Добавить веб-ссылку». Кроме того, .NET 2.0 - это что? Десятилетие? У вас не должно быть конкурентов. –

ответ

1

Проведя некоторое время на анализе и исследовании wsdl моего сервиса, я смог найти исправление для этой проблемы.

Нам нужно использовать CDATA (то есть постоянные данные) для всех этих узлов xml, которые не отображаются непосредственно в WSDL, и поэтому этот тег должен быть отправлен в виде текста в службу. Этот тег находился под родительским тегом, который был определен в wsdl. Я применил CDATA, чтобы отправить эту информацию в мое мыло 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> 

Эта ошибка говорит о том, что мы передаем пустой URI для элемента <CONTACT>. uri здесь представляет пространство имен тега <CONTACT>, которое должно быть доступно в службе wsdl соответствующей операции. Этот элемент упоминается здесь как LOCAL, и поскольку у службы не было информации об этом теге в wsdl, он пытался найти пространство имен для этого элемента.

Надеюсь, это поможет многим людям, столкнувшимся с этой проблемой.

Смежные вопросы