Содержание статей: 1С:Предприятие 8. Веб-сервисы
Предыдущая статья: 1С:Предприятие 8. Веб-сервисы. Возвращаем массив
Хочу рассказать об ошибках, с которыми столкнулся при разработке веб-сервисов на 1С. Статью буду дополнять по мере получения опыта.
1
Это сообщение об ошибке при подключении к веб сервису из PHP.
[31-Mar-2013 05:32:02 UTC] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://test.ru/test/ws/WebServices?wsdl' : failed to load external entity
Данное сообщение говорит лишь о недоступности веб-сервера, на котором опубликована база. В этом случае попробуйте вручную вызвать http://test.ru/test/ws/WebServices?wsdl и убедиться, что WSDL формируется. Если не формируется, значит либо веб-сервер выключен, либо база опубликована по другому адресу или порту, либо блокирует фаервол. Могут быть и другие причины.
2
02-Apr-2013 13:46:10 UTC] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/users/b/test/domains/test.ru/testDIR/test.php:169
Эта ошибка возникает если WSDL возвращается с ошибкой. Есть несколько причин для этой ошибки:
- Несогласованность пространств имен в конфигурации. Например в ws-операции тип возвращаемого значения не соответствует типу из XDTO. Это может возникнуть при сменен URI пространства имен пакета XDTO.
- Возникает если в PHP включить кеш WSDL. Кеш запоминает WSDL и при каждом вызове веб-операции не запрашивает его, но если вы поменяли веб-сервис, то произойдет ошибка. Вообще, при разработке кеш стоит отключить, а если уже все работает то для скорости лучше включить. Ускорение при отключенном кеше заметное. Для примера скажу, что создание объекта SoapClient с выключенным кешем занимает примерно 2 сек, а с включенным - за сотые доли секунды. Отключить можно так:
ini_set
(
"soap.wsdl_cache_enabled"
, 0);
или$client
=
new
SoapClient(
'http://somewhere.com/?wsdl'
,
array
(
'cache_wsdl'
=> 0));
3
Ошибка SOAP сервера: Неизвестная ошибка. bad allocation.
Скорее всего недостаток оперативной памяти - проверьте запрос и результат вывода веб сервиса. Запрос может быть сложным, потому может быстро исчерпать оперативную память.
Не могу разобраться со следующей ошибкой. Разные soap клиенты возвращают ошибку типа "Unable to parse URL" при вызове любого метода после чтения wsdl. Т.е. wsdl читают, а следующий запрос отправить не могут. На причину этой ошибки меня наталкивает отсутствие полного url в wsdl: . 1C 8.2.16.362, apache 2.2.18, 2.2.25. Т.е. обновление апача с 18 до 25 релиза не помогло. В httpd.conf прописан ServerName tst.icc.biz:80. Куда рыть дальше? Пробовать другой релиз 1С?
ОтветитьУдалитьЯ бы проверил пространства имен пакетов XDTO, которые описывают типы возвращаемые в результатах операций.
УдалитьТестовый вэб-сервис очень простой - без пакетов xdto. Один метод получает на вход два параметра типа string (http://www.w3.org/2001/XMLSchema) и возвращает один такой же. Да и пространство имён не имеет отношения к адресу вэб-сайта. В предыдущем сообщении порезалась строка из wsdl:
Удалить< soap12bind:address location="/ws/Order"/>
У меня тоже указано имя сервера так же как у вас, но ошибка не воспроизводится. Думаю дело не в этом. На другой версии 1С пробовали?
УдалитьРазобрался с проблемой.
ОтветитьУдалитьСовпало два фактора.
Первый фактор - неправильный адрес web-сервиса, к которому я обращался: http://tst/ws/Order?wsdl.
Второй фактор - web-сервис я опубликовал в каталоге ws относительно корня web-сервера.
При совпадении двух факторов начинает отдаваться тот злосчастный wsdl без полного url по адресу http://tst/ws/Order?wsdl.
По хорошему, этот адрес не должен возвращать wsdl вообще, но при появлении второго фактора почему то возвращает.
Правильный адрес такой: http://tst/base/ws/Order?wsdl или http://tst/base/ws/order.1cws?wsdl. Здесь base - это alias для каталога ws в httpd.conf, он же имя базы 1C, а /ws после /base - это уже зарезервированное 1С обращение к вэб-сервису.
Видимо 1С и апач не разобрались, что значит /ws в неправильном адресе, каждый наверно подумал про своё.
Если бы я назвал подкаталог web-сервера ws другим именем, то по неправильному адресу неправильного wsdl не было бы.
Добрый день!
ОтветитьУдалитьУ меня при подключении к веб-сервису 1С из 1С пишет ошибку аутентификации пользователя.
Пытался в файле default.vrd прописать доступ пользователя, но все равно выдает ошибку аутентификации.
Вот текст файла(у меня apache2.2) default.vrd:
?xml version="1.0" encoding="UTF-8"?>
Этот комментарий был удален автором.
ОтветитьУдалитьib="File="C:\Users\Евгений\Работа\Личное сопровождение пользователей\Работа с Фоминым\УТ";Usr="'1'";pwd="";"
ОтветитьУдалитьПользователи берутся из базы. Попробуйте авторизоваться пользователем у которого есть пароль.
УдалитьДобрый день. При работе на одном компьютере стали возникать ошибки при отображении отчетов. При файловой системе достаточно почистить кэш. Как быть с веб-сервером? Кэш браузера пробовала чистить - не помогло. Вход с другого браузера помог, но если и на нем сбой случится? Есть решение проблемы?
ОтветитьУдалитьКак быстрое решение - открыть приватную вкладку в браузере.
УдалитьНо вообще очистка кеша браузера должна помогать. Может быть не все удаляется.
Спасибо, попробую
Удалить