Отправка SOAP-запроса application / soap + xml с использованием Classic ASP - PullRequest
3 голосов
/ 07 января 2010

Любая помощь с этим будет оценена; Я занимаюсь этим уже несколько дней.

Ниже приведен код, который я получил до сих пор; к сожалению, когда я запускаю его, я получаю ошибку HTTP 415; Невозможно обработать сообщение, так как тип содержимого 'text / xml; charset = UTF-8 'не был ожидаемым типом' application / soap + xml; кодировка = UTF-8' .

Я должен отправить контент типа application / soap + xml, так как это единственный тип, который разрешает веб-служба; и я должен сделать это в классическом ASP.

Я попытался изменить строку 'send' на "objRequest.send objXMLDoc.XML", но тогда я получаю HTTP 400 Bad Request ошибка.


strXmlToSend = "<some valid xml>"
webserviceurl = "http://webservice.com"
webserviceSOAPActionNameSpace = "avalidnamespace"

Set objRequest = Server.createobject("MSXML2.XMLHTTP.3.0")
objRequest.open "POST", webserviceurl, False

objRequest.setRequestHeader "Content-Type", "application/soap+xml"
objRequest.setRequestHeader "CharSet", "utf-8"
objRequest.setRequestHeader "action", webserviceSOAPActionNameSpace & "GetEstimate"
objRequest.setRequestHeader "SOAPAction", webserviceSOAPActionNameSpace & "GetEstimate"

Set objXMLDoc = Server.createobject("MSXML2.DOMDocument.3.0")
objXMLDoc.loadXml strXmlToSend
objRequest.send objXMLDoc
set objXMLDoc = nothing

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Когда вы передаете XML DOM или метод отправки, Content-Type всегда устанавливается на "text / xml".

Если вы хотите управлять типом контента, вы должны передать строку. Не беспокойтесь о загрузке строки XML в DOM только для вызова свойства xml, поскольку это может изменить содержимое объявления xml. Кстати, как выглядит объявление xml в строке XML, и уверены ли вы, что XML верен? Кодировка в объявлении xml, если она присутствует, должна содержать «UTF-8».

Не отправлять заголовок CharSet это ничего не значит, CharSet является атрибутом заголовка Content-Type.

Не используйте XMLHTTP из ASP, это небезопасно.

Следовательно, ваш код должен выглядеть следующим образом: -

strXmlToSend = "<some valid xml>" 
webserviceurl = "http://webservice.com" 
webserviceSOAPActionNameSpace = "avalidnamespace" 

Set objRequest = Server.Createobject("MSXML2.ServerXMLHTTP.3.0") 
objRequest.open "POST", webserviceurl, False 

objRequest.setRequestHeader "Content-Type", "application/soap+xml; charset=UTF-8" 
objRequest.setRequestHeader "action", webserviceSOAPActionNameSpace & "GetEstimate" 
objRequest.setRequestHeader "SOAPAction", webserviceSOAPActionNameSpace & "GetEstimate" 

objRequest.send strXmlToSend 

Не уверен насчет этого заголовка "action", либо он мне кажется излишним. Возможно, это все равно будет неудачным, но больше не должно жаловаться на заголовок Content-Type.

2 голосов
/ 07 января 2010

Вот что я успешно использовал в прошлом:

    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    xmlhttp.open "POST", url, false
    xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
    xmlhttp.setRequestHeader "SOAPAction", "http://www.mydomain.com/myaction" 
    xmlhttp.send postdata
    xml = xmlhttp.responseText
...