AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.01.2016, 09:56   #1  
poul_and is offline
poul_and
Участник
 
56 / 12 (1) ++
Регистрация: 08.04.2003
Цитата:
Сообщение от 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"
Старый 28.01.2016, 12:47   #2  
poul_and is offline
poul_and
Участник
 
56 / 12 (1) ++
Регистрация: 08.04.2003
Нашел в чём проблема.
Если отсылать XML файл (XmlRequest это 'Microsoft XML, v6.0'.DOMDocument), то XmlHttp автоматом ставит Content-Type = text/xml
Видимо это нельзя отменить, необходимо в методе locautXmlHttp.send отправлять текстовую строку
Остаётся вопрос - как правильнее преоброзовать в строку большой(!) XML файл?
Старый 28.01.2016, 22:13   #3  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от poul_and Посмотреть сообщение
Нашел в чём проблема.
Если отсылать XML файл (XmlRequest это 'Microsoft XML, v6.0'.DOMDocument), то XmlHttp автоматом ставит Content-Type = text/xml
Видимо это нельзя отменить, необходимо в методе locautXmlHttp.send отправлять текстовую строку
Остаётся вопрос - как правильнее преоброзовать в строку большой(!) XML файл?
Для включения xml документов в конверт для лишенцев (Нав 5.0 и ниже) использовал xmlTextNode и функцию (ниже), но думаю проблема не в этом.
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);
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:11.