2010-01-07 3 views
2

Любая помощь с этим будет оценена по достоинству; Я был у него уже несколько дней.Отправка запроса SOAP-приложения/мыла + xml с использованием классического ASP

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

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

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


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 
+0

Не могли бы вы использовать Fiddler или какой-либо инструмент анализатора трафика HTTP, чтобы узнать, что происходит с POSTed на веб-сервисе (когда он используется в браузере)? И затем сделайте свой XMLHttpRequest опубликованным же. – shahkalpesh

+0

@shahkalpesh: Как вы получаете браузер, чтобы «потреблять» веб-сервис? Особенно нужен метод POST ?. – AnthonyWJones

ответ

2

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

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 
+0

Привет, спасибо за ответ. К сожалению, я думаю, что проблема заключается в формировании отправляемых данных, она всегда рассматривает его как «text/xml», даже если я укажу «application/soap + xml». С уважением – Simon

+0

@Simon - если это так, вам нужно взглянуть на то, что публикуется. Как предложил shahkalpesh, попробуйте fiddler, чтобы увидеть, что публикуется на вашей странице, и что опубликовано, если вы используете инструмент тестирования веб-сервисов, такой как SoapUI. Возможно, вам не хватает какого-то важного XML (например, мыльного конверта) –

2

При передаче XML DOM Ot метод отправки Content-Type всегда установлен в «текст/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 

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