|
Отладка soap-запросов, отправляемых из 1С | ☑ | ||
---|---|---|---|---|
0
Evgenius
17.04.19
✎
14:03
|
Доброго времени суток.
Возникла проблема при подключении к стороннему web-сервису, а еще одна обнаружилась при попытке понять, что именно 1С передает: 1. При вызове метода web-сервиса получаем ошибку: "The SOAP action specified on the message, '', does not match the HTTP SOAP Action" 2. Чтобы посмотреть на сам https-запрос, установил fiddler, настроил его на расшифровку https-трафика. В результате получил другую ошибку: "Ошибка работы с Интернет: Удаленный узел не прошел проверку" Ок, решил добавить сертификат, который устанавливает fiddler для расшифровки трафика, в доверенное хранилище 1С. Экспортировал сертификат. Он имеет формат *.cer, и содержимое файла явно не подходит, чтобы вставить его в cacert.pem. Вот здесь: Не могу заставить работать 1С через Fiddler автор пишет, что ему это удалось, но без подробностей. Миста, видимо, глючит, и из этого топика личное сообщение автору отправить нельзя. Подскажите, пожалуйста, кто что знает 1) о самой первой ошибке, 2) и о добавлении в 1С-овское хранилище fiddler'овского сертификата для просмотра трафика. Спасибо. |
|||
1
Cyberhawk
17.04.19
✎
14:25
|
Релиз платформы?
|
|||
2
Cyberhawk
17.04.19
✎
14:26
|
После где-то 8.3.7 не нужно добавлять сертификаты в файл каталога платформы 1С, а надо в хранилище ОС добавлять
|
|||
3
Evgenius
17.04.19
✎
14:35
|
(2) Релиз 8.3.10, но в режиме совместимости с 8.2.16, если в данном случае это имеет значение.
Если так, то должно было бы работать: fiddler именно в хранилище ОС свой сертификат добавляет, при наличии прав, а права есть. |
|||
4
Asmody
17.04.19
✎
14:36
|
(0) Сертификат надо сохранять в формате base64. Открывать блокнотом и копировать содержимое в конец cacert.pem
|
|||
5
Evgenius
17.04.19
✎
14:42
|
(4) Это понятно, вопрос не в этом, см. (0):
содержимое файла явно не подходит, чтобы вставить его в cacert.pem. Если подробнее: это двоичный файл, не текст в base64. Какой тут подойдет конвертер, я не знаю, OpenSSL требует точно указать формат входного файла (который я не знаю). |
|||
6
Cyberhawk
17.04.19
✎
16:57
|
(3) Да, режим совместимости ниже 8.3.8 влечет неоходимость юзать файлик cacert.pem
|
|||
7
Cyberhawk
17.04.19
✎
17:02
|
"содержимое файла явно не подходит, чтобы вставить его в cacert.pem" // DER что ли? Ну онлайн-конвертеров тонна, как и утилитка openssl
|
|||
8
Asmody
17.04.19
✎
17:04
|
(5) Windows умеет экспортировать сертификаты в base64 (подсказка - тип файла в диалоге Сохранить)
|
|||
9
Evgenius
18.04.19
✎
07:43
|
(6) Похоже, что дело не в самом режиме совместимости, а в том, что КОНФИГУРАЦИИ, которые требуют этого режима, не используют новые возможности платформы (те, про которые вы напомнили, появившиеся после 8.3.7): я дополнил вызов функции <WSСсылка>.СоздатьWSПрокси, явно передав в нее параметр ЗащищенноеСоединение:
Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows()) В результате был подхвачен сертификат из хранилища Windows, вызов прошел, и трафик начал расшифровываться Fiddler'ом. Так что, теперь вопрос в первой, основной проблеме: "The SOAP action specified on the message, '', does not match the HTTP SOAP Action" Что скажете, джентльмены? |
|||
10
Cyberhawk
18.04.19
✎
07:59
|
Фиддлер не помог что ли?
|
|||
11
Evgenius
18.04.19
✎
08:29
|
(10) Фиддлер позволяет увидеть запрос. Но в этом запросе я никакого криминала не вижу
|
|||
12
Evgenius
18.04.19
✎
08:31
|
(10) И вообще не понимаю, что эта ошибка означает, а потому и исправить не знаю, как. В этом и вопрос: что это за ошибка
("The SOAP action specified on the message, '', does not match the HTTP SOAP Action") ? Если я догадываюсь правильно, и дело в том, что в http-запросе нет заголовка SOAPAction, то тогда, соответственно, вопрос уточняется: как этот заголовок в http-запрос добавить |
|||
13
baza1
18.04.19
✎
09:12
|
Тоже было с action-ом проблема, принимающая сторона принимала SOAPAction либо пустым, либо правильно заполненным.
Но проблема в 1С, что пустой заголовок не вставляется в запрос. Т.е. если написать Заголовки = Новый Соответствие; Заголовки.Вставить("SOAPAction", ""); HTTPЗапрос = Новый HTTPЗапрос("...",Заголовки); то заголовок SOAPAction в запросе не будет вообще, даже "", а сервис его ждал. Пришлось явно указывать полный путь (даже не просто имя метода). Заголовки = Новый Соответствие; Заголовки.Вставить("SOAPAction", "http://.....ru/ws/..../" + ИмяМетода); HTTPЗапрос = Новый HTTPЗапрос("....",Заголовки); может проблема из этой серии? |
|||
14
Evgenius
18.04.19
✎
12:06
|
(13) Скорее всего, именно из этой, но вопрос-то, есть ли решение для объекта WSПрокси
|
|||
15
Сияющий в темноте
18.04.19
✎
15:58
|
(12)он вам говорит,что указанный заголовок Action,и рисует пустую строку,не является правильным заголовком Action,который сервис ожидает.
Вам,удалось засунуть пустой заголовок,но он должен быть не пустой. |
|||
16
Cyberhawk
18.04.19
✎
18:49
|
(11) Так осталось сравнить этот запрос с тем, что работает из СоапУИ
|
|||
17
Evgenius
19.04.19
✎
08:04
|
(15) Да, он это говорит, но если верить fiddler'у, то такого заголовка в запросе, нет, ни пустого, ни заполненного.
Есть директива action в заголовке Content-type: POST /.../XRMServices/2011/Organization.svc HTTP/1.1 Host: ....ru User-Agent: 1C+Enterprise/8.3 Accept: */* Content-Type: application/soap+xml;charset=utf-8;action="http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/RetrieveMultiple" Content-Length: 987 И самое главное, у объекта WSпрокси нет методов для установки заголовков. Так что, мне ничего не "удавалось" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |