Добрый день. Немного предыстории : полгода назад произошла интеграция нашего 1С с сайтом. Все работало хорошо, но месяца 2 назад перестал работать "Обмен заказами". При этом "Обмен товарами" работает, да и выгрузка в Highload-блоки тоже.
Суть - заказы накапливаются на сайте, начинается загрузка в 1С, загрузка происходит очень долго, а конкретно очень долго идут этапы "Поиск ранее загруженных документов" и "Идентификация номенклатуры". После обработки загруженных документов, на стадии отправки на сайт ответа об успешной обработке заказов, происходит ошибка - http://prntscr.com/bgm9bk.
Запустил отладчик, дошел до этого самого момента, когда после процедуры ОбработатьДокументы запускается следующая : ПроцедурыОбменаССайтом.HTTPПолучитьДанныеССервера(Соединение, АдресДляРаботы + ПараметрЗапросаHTTP_УспешноеЗавершениеИмпорта, ЗаголовкиЗапросов, ИнформацияДляПользователя);
Так вот, на этом этапе переменная Соединение = Неопределенно. Прилагаю скрин - http://prntscr.com/bdfabj Соответственно, этот этап вываливается в ошибку, информация об обработке заказов на сайт не передается, заказы для выгрузки начинают копиться как снежный ком.
Александр написал: Добрый день. Немного предыстории : полгода назад произошла интеграция нашего 1С с сайтом. Все работало хорошо, но месяца 2 назад перестал работать "Обмен заказами". При этом "Обмен товарами" работает, да и выгрузка в Highload-блоки тоже.
Суть - заказы накапливаются на сайте, начинается загрузка в 1С, загрузка происходит очень долго, а конкретно очень долго идут этапы "Поиск ранее загруженных документов" и "Идентификация номенклатуры". После обработки загруженных документов, на стадии отправки на сайт ответа об успешной обработке заказов, происходит ошибка - http://prntscr.com/bgm9bk .
Запустил отладчик, дошел до этого самого момента, когда после процедуры ОбработатьДокументы запускается следующая : ПроцедурыОбменаССайтом.HTTPПолучитьДанныеССервера(Соединение, АдресДляРаботы + ПараметрЗапросаHTTP_УспешноеЗавершениеИмпорта, ЗаголовкиЗапросов, ИнформацияДляПользователя);
Так вот, на этом этапе переменная Соединение = Неопределенно. Прилагаю скрин - http://prntscr.com/bdfabj Соответственно, этот этап вываливается в ошибку, информация об обработке заказов на сайт не передается, заказы для выгрузки начинают копиться как снежный ком.
Подскажите в какую сторону копать??!?! HELP!!
Если Неопределено, то может 1С не смогло подключиться к сайту. Может дело в этом?
Надо порыться на стороне сайта для начала. Очень долго - понятие растяжимое. Но это "долго" может оказаться больше максимального времени работы скрипта PHP (и сопутствующих таймаутов Apache, nginx, fastcgi). А если "очень-очень" - то и дольше времени жизни сессии PHP.
По тексту создается впечатление, что 1С начинает о чем-то долго думать, а когда лезет за продолжением на сайт, он не отвечает. Тогда это больше похоже на срок жизни сессии.
Лог на первом скриншоте потрясает своей подробностью (это привет Александр Денисюк). Там нет меток времени совсем. И непонятно сколько времени идет процесс. Диагностическое сообщение "Не удалось получить данные с сервера. Проверьте правильность адреса сервера, порт, имя пользователя и пароль, а также настройки подключения к Интернет" слишком общее. Нужна точность.
Наличие доступа к определенному узлу по TCP/IP проверить можно сразу как только вылезла ошибка. Бывали у меня такие ситуации, когда ни 1С, ни сайт ни причем, а препятствует работе шлюз (проделки админа ЛВС с демо версией, которая отказалась работать в определенное время).
Адрес хоста и прочее очевидно корректные, т.к. процесс был начат. Соответственно - не имеют смысла в этой ситуации.
"Не удалось получить". А что тогда удалось? Сокет хотя бы открыт?
С такой диагностикой разработчику 1С совершенно нечего сказать ни админу ЛВС, ни хостеру, ни разработчику сайта. Только "не работает".
К примеру, если моя догадка насчет срока жизни сессии верна, то не проходит авторизация на этом запросе к сайту. Тогда сеть есть, соединение есть, HTTP запрос успешен, но получил не те данные. Тогда какие?
to Александр Денисюк - 1С смогло подключиться, но потом соединение пропало.
Цитата
Надо порыться на стороне сайта для начала. Очень долго - понятие растяжимое. Но это "долго" может оказаться больше максимального времени работы скрипта PHP (и сопутствующих таймаутов Apache, nginx, fastcgi). А если "очень-очень" - то и дольше времени жизни сессии PHP.
to Анатолий Кирсанов - вот как раз с такими высказываниями я и начал донимать тех.поддержку сайта. Обмен идёт в среднем от 30 до 60 минут.
Цитата
По тексту создается впечатление, что 1С начинает о чем-то долго думать, а когда лезет за продолжением на сайт, он не отвечает. Тогда это больше похоже на срок жизни сессии.
Пробежав по отладчику, я к пришел к выводу что так и есть.
Цитата
Адрес хоста и прочее очевидно корректные, т.к. процесс был начат. Соответственно - не имеют смысла в этой ситуации.
совершенно верно, все данные для подключения корректны.
Цитата
"Не удалось получить". А что тогда удалось? Сокет хотя бы открыт?
Цитата
К примеру, если моя догадка насчет срока жизни сессии верна, то не проходит авторизация на этом запросе к сайту. Тогда сеть есть, соединение есть, HTTP запрос успешен, но получил не те данные. Тогда какие?
1) Произошло подключение к сайта, авторизация
2) С сайта загрузился XML-файл с заказами
3) Запустился процесс обработки заказов средствами 1С
4) 1С хочет уведомить сайт об успешной обработке заказов и получить в ответ "success", но уже переменная "Соединение" к этому моменту перестала существовать.
Александр написал: это больше вопросы к тех.поддержке сайта и хостингу, чем к простому 1Снику?
Странные у Вас вопросы ... Видимо, идет некая внутренняя борьба.
Определенно здесь больше работы на хостинге и в Битрикс. 1С-ник здесь нужен для запусков обмена и "рапортов" с его стороны.
Не знаю возможностей платформы 1С по отладке. Пустой объект Соединение - это детектив. Мои привычки к языкам программирования говорят о том, что переменные сами собой не исчезают. Может измениться только их состояние (это ведь наверняка COM). Может платформа использует неявное приведение типов к булеву ...
В общем, из написанного мной понятно что примерно думает "поддержка сайта" когда Вы им пишете о страшной проблеме. Здесь нужно глубоко залезать в объект Соединение и показывать внятно что там в нем пустого случилось. Без этого ситуация кажется внутренней проблемой 1С. На стороне сайта могут провести дежурную проверку (например выдать настройки по времени жизни сессии).
И еще ... Заметил уже по своей практике, что 1С-ник и Инет - это туго. И это несмотря на то, что сама платформа позволяет делать на 1С WEB-сервисы. Не исключено, что это портит отношения с поддержкой сайта.
Александр написал: это больше вопросы к тех.поддержке сайта и хостингу, чем к простому 1Снику?
Странные у Вас вопросы ... Видимо, идет некая внутренняя борьба.
Определенно здесь больше работы на хостинге и в Битрикс. 1С-ник здесь нужен для запусков обмена и "рапортов" с его стороны.
Не знаю возможностей платформы 1С по отладке. Пустой объект Соединение - это детектив. Мои привычки к языкам программирования говорят о том, что переменные сами собой не исчезают. Может измениться только их состояние (это ведь наверняка COM). Может платформа использует неявное приведение типов к булеву ...
В общем, из написанного мной понятно что примерно думает "поддержка сайта" когда Вы им пишете о страшной проблеме. Здесь нужно глубоко залезать в объект Соединение и показывать внятно что там в нем пустого случилось. Без этого ситуация кажется внутренней проблемой 1С. На стороне сайта могут провести дежурную проверку (например выдать настройки по времени жизни сессии).
И еще ... Заметил уже по своей практике, что 1С-ник и Инет - это туго. И это несмотря на то, что сама платформа позволяет делать на 1С WEB-сервисы. Не исключено, что это портит отношения с поддержкой сайта.
Да некая борьба есть, не спорю. И все из-за того, что мы им платим деньги за хостинг и поддержку сайта, и мне эта "поддержка" говорит - это у Вас что-то в 1С. В то время как в 1С HTTPСоединиение - базовый элемент.
Код
Предназначен для работы с файлами на http-серверах.
Позволяет использовать
аутентификацию по имени пользователя и паролю или NTLM (Integrated Security)
аутентификацию (в версии 1С:Предприятия под Windows).
NTLM аутентификация
используется по умолчанию для прокси-серверов, поддерживающих, данный способ
аутентификации, и не требует дополнительных настроек, т.е. NTLM аутентификация
будет использоваться, если в конструкторе объекта HTTPСоединение прокси не задан
или задан, но без указания имени пользователя и пароля. Задание в конструкторе
объекта HTTPСоединение прокси с указанным именем пользователя и паролем
отключает NTLM аутентификацию, для аутентификации в этом случае используется
HTTP Basic аутентификация.
Поддерживаются следующие протоколы: HTTP 1.0, HTTP
1.1, SSL 3.0, TLS 1.0.
Александр написал: В то время как в 1С HTTPСоединиение - базовый элемент
На это Вам всегда будут отвечать, что проблема в 1С.
Документация на этот базовый элемент есть? Сам ни разу не нашел (похоже, она в принципе доступна только партнерам 1С).
Как пример, есть в Битрикс класс CIBlockElement. Если нужно добавить или изменить элемент инфоблока и посмотреть что из этого вышло, поможет член этого класса LAST_ERROR и системное исключение (все это о старом ядре Битрикс, всего-лишь для иллюстрации).
В случае проблем в работе с объектом этого класса всегда можно узнать что конкретно произошло (и это помимо различных протоколов, которые можно вести).
А с объектом 1С HTTPСоединиение как-то все уныло - он пустой и все. Так не бывает. Должны быть способы узнать что именно не так. Не найдете - не докажете ничего.
По моей просьбе тех.поддержка увеличила некие параметры, которые как они назвали "Время жизни сессии". Какие на самом деле параметры они увеличили, не сказали, но после этого обмен стал НЕ проходить и за 18 минут. Такое ощущение, что раньше некое ограничение стояло на 30 минут, они что-то наковыряли, и стало 15 минут, т.е. ещё хуже (Данные высказывание подтверждены проверками).
После этого, отчаявшись в их пряморукости, запросил доступ через SSH к выделенному серверу. Пытался настроить php.ini, а конкретно такие параметры, как : session.cookie_lifetime session.gc_maxlifetime upload_max_filesize post_max_size memory_limit max_input_vars max_execution_time
очень странно, потому что должно быть 4 этапа init checkauth query success и если бы сервер вас отпулил по какой-либо причине, то в логах бы все равно стояло обращение по success, но стоял бы 5XX ответ а у вас даже обращения нет, так что это 1с не посылает команду
Битрикс не посылает success, как вы выше писали. Он принимает команду, чтобы в таблице b_option записать время последнего успешного экспорта заказов в unixtime
Александр Кислицын написал: очень странно, потому что должно быть 4 этапа init checkauth query success и если бы сервер вас отпулил по какой-либо причине, то в логах бы все равно стояло обращение по success, но стоял бы 5XX ответ а у вас даже обращения нет, так что это 1с не посылает команду
1С не может послать команду. После query в 1С происходит обработка полученных данных, занимает она 20 минут примерно. Но после окончания этого этапа, HTTP соединения уже не существует, вот success и не срабатывает.
Если средствами 1С сделать этап обработки документов меньше по времени, то обмен проходит за 9 минут, и за это время все нормально, и все этапы отрабатывают успешно. Вот и возникает вопрос, почему за 10 минут обмена все работает, а за 20 минут нет.
Проблема в 1С, потому что если бы она действительно послала запрос и на его момент уже слетела бы авторизации, то в логи бы все равно было записано событие и отлуп, что доступ запрещен