|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Orwell
![]() Тут как бы несколько составляющих (в обе стороны):
1. Авторизация; 2. Создание сообщения (SOAP Envelope, XML Message); 3. Сабмит сообщения на http(s) endpoint (HttpWebRequest .NET Interop); 4. Обработка полученного от сервиса ответа (HttpWebResponse .NET Interop). Напишите, что конкретно из этого интересует. На текущем проекте сделал кучу интеграций с использованием SOAP - все использованием стандартных .NET Interop без всяких адд-онов. Пойму, в чем именно вопрос - скину код. Вот этот код работает: locautXmlHttp.open('POST','https://193.41.33.48:443/kpsws-webapp/Login', 0); locautXmlHttp.setRequestHeader('Content-Type','application/soap+xml'); locautXmlHttp.setRequestHeader('SOAPAction','doLogin'); locautXmlHttp.send(XmlRequest); Но, в заголовке НТТР пакета всё равно стоит "Content-Type = text/xml". Соответственно вебсервис выплёвывает ошибку Точнее получаются две строки в заголовке "Content-Type = text/xml" и "ContentType = application/soap+xml" |
|
![]() |
#2 |
Участник
|
Нашел в чём проблема.
Если отсылать XML файл (XmlRequest это 'Microsoft XML, v6.0'.DOMDocument), то XmlHttp автоматом ставит Content-Type = text/xml Видимо это нельзя отменить, необходимо в методе locautXmlHttp.send отправлять текстовую строку Остаётся вопрос - как правильнее преоброзовать в строку большой(!) XML файл? |
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от poul_and
![]() Нашел в чём проблема.
Если отсылать XML файл (XmlRequest это 'Microsoft XML, v6.0'.DOMDocument), то XmlHttp автоматом ставит Content-Type = text/xml Видимо это нельзя отменить, необходимо в методе locautXmlHttp.send отправлять текстовую строку Остаётся вопрос - как правильнее преоброзовать в строку большой(!) XML файл? Content-Type всегда можно переопределить в хидере запроса, также попробуйте вместо XMLHTTP60 использовать ServerXMLHTTP60 AddXmlDocAsParam(lName : Text[1000];VAR lXmlDoc : Automation "'Microsoft XML, v3.0'.DOMDocument") xmlSoapParam:=xmlDoc.createElement(lName); xmlSoapParam:=xmlSoapFunction.appendChild(xmlSoapParam); CREATE(lAdoStream); lAdoStream.Open; lXmlDoc.save(lAdoStream); xmlDomText:=xmlSoapParam.ownerDocument.createTextNode(''); lSize:=lAdoStream.Size; lAdoStream.Position:=0; lAdoStream.Charset:='UTF-8'; WHILE NOT lAdoStream.EOS DO BEGIN xmlDomText.appendData(lAdoStream.ReadText(250)); END; xmlSoapParam.appendChild(xmlDomText); |
|