Интеграция 1С и не 1С WEb - сервис. Выдаёт ошибку при отправке

1. ruho 29.09.20 16:09 Сейчас в теме
Добрый день. Надо "научить" 1С ERP "общаться" с некой программой. Был выдан WS ссылка, подцепил её к 1С в общие метаданные "WS-ссылки" получил описания пакетов, составил по присланному XDTO длинную XML строку, а при отсылке этой длинной строки с помощью описанного метода SendMessage получаю ошибку :


При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: Указанное в сообщении действие SOAP, "", не соответствует действию HTTP SOAP, "http://********/********ServiceContract/SendMessage".
Код ошибки: Sender.ActionMismatch
Техническая информация:
<s:Detail xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<a:ProblemHeaderQName>a:Action</a:ProblemHeaderQName>
</s:Detail>

{ВнешняяОбработка.КИТ_DataScan.Форма.Форма.Форма(294)}: Результат = Прокси.SendMessage(WSПараметр.value);
{ВнешняяОбработка.КИТ_DataScan.Форма.Форма.Форма(5)}: ФункцияОбменаНоменклатура(Адрес);

по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://********}:Service:SendMessage()
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: Указанное в сообщении действие SOAP, "", не соответствует действию HTTP SOAP, "http://*******/*******ServiceContract/SendMessage".
Код ошибки: Sender.ActionMismatch
Техническая информация:
<s:Detail xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<a:ProblemHeaderQName>a:Action</a:ProblemHeaderQName>
</s:Detail>



				WSОпределение = Новый WSОпределения(?(Прав(ВыборкаНастройки.СсылкаПодключения, 1) = "/", 
					Лев(ВыборкаНастройки.СсылкаПодключения, СтрДлина(ВыборкаНастройки.СсылкаПодключения) - 1), ВыборкаНастройки.СсылкаПодключения) 
					+ "?singleWsdl");
					
				WSСервис = WSОпределение.Сервисы[0];
				   
				Прокси = Новый WSПрокси(WSОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
				   
				ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить((WSСервис.URIПространстваИмен)).Получить("SendMessage");

				WSПараметр      = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
				WSПараметр.value   = ДанныеXML;
				   
				Результат = Прокси.SendMessage(WSПараметр.value);	
Показать


Потом решили сделать более универсально данные поws ссылке в РС прописываются. оттуда и "ВыборкаНастроек".

Описание, Прокси создаётся без ошибок, WSПараметры создаются заполняются без ошибок. При SendMessage ошибка.

Последнюю строку пробовал в разных вариациях ?
Результат = Прокси.SendMessage(WSПараметр.value);
Результат = Прокси.SendMessage(WSПараметр);
Результат = Прокси.SendMessage(ДанныеXML);
Прокси.SendMessage(WSПараметр.value);
Прокси.SendMessage(WSПараметр);
Прокси.SendMessage(ДанныеXML);

Создавал прокси по общему объекту WSСсылки и конструктором и напрямую прописывал параметры и через вызов определения и т.д. и т.п. Авторизация при подключении прокси не нужна.

Что это вообще может быть? Не нашел описания буквально нигде.
Прикрепленные файлы:
Найденные решения
7. ruho 30.09.20 17:34 Сейчас в теме
Всё проще оказалось. Это xml в soap. Строка XML передаётся как параметр. В таком случае в xml не должно быть специальных символов "<" и ">" которыми напичкан весь xml документ. В таком случае необходимо заменять символы на последовательность из картинки.
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. koln 30.09.20 06:32 Сейчас в теме
(1)А в строке
WSПараметр.value   = ДанныеXML;
, что в ДанныеXML?
2. ruho 29.09.20 16:27 Сейчас в теме
С другой стороны проверяли свой сервис через программу SOAPUI, как бы всё работает. Не совсем понятно может у 1С какие то более расширенные требования или я как то не так вызываю функцию (SendMessage функция которая должна вернуть 1 если отправляемая XML строка верно построена). На чем написана принимающая сторона понятия не имею.

Перепробовал и перечитал очень многое. Если честно идей уже 0. С WSDL работал 2 раза, правда обмен был между 1С и 1С. Проблем не было вообще.

При переходе по предоставленной ссылке открывается следующее описание в прикрепленном файле.
Прикрепленные файлы:
3. user1466751 17 29.09.20 16:49 Сейчас в теме
Ну, если с СоапУИ нет проблем, то и соберите целиком тело запроса и пушните его через HTTPСоединение.
4. vlad_d 29.09.20 21:08 Сейчас в теме
Судя по тексту, чтобы получить ошибку, в SendMessage параметром отправляем пустую строку. Предлагаю скормить ему значение Неопределено, например. Отработает?
6. ruho 30.09.20 06:52 Сейчас в теме
(4) Не, то же самое.

Ну просто вот как я думаю :
Когда создаёшь WSDL между 1С и 1С то получается метод описывается полностью на стороне приёмника, а в источнике просто этот метод вызывается и туда передаётся параметр. Вот у меня в ТЗ "параметр" - это xml строка, я ей сформировал передал туда - а там ошибка. Получается с той стороны конструктора нет, получается как то так. Но учитывая что SOAPUI даёт ответ, то наверное и правда HTTP запрос надо написать как написано в 3, пока ловлю ошибку 415. Читаю литературу.
7. ruho 30.09.20 17:34 Сейчас в теме
Всё проще оказалось. Это xml в soap. Строка XML передаётся как параметр. В таком случае в xml не должно быть специальных символов "<" и ">" которыми напичкан весь xml документ. В таком случае необходимо заменять символы на последовательность из картинки.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот