Имя: Пароль:
1C
1С v8
Обмен мобильные-сервер: ошибка разбора XML [1,1] - часто возникает, как бороть?
,
0 dave2000
 
22.12.16
13:00
Платформа сервера 1С 8.3.7.1917
Платформа мобильных: 8.3.5.109

Есть самописные обмены между базами и мобильными устройствами (стандартный handshake xml-обмен, описан тут: http://fs.kursypo1c.ru/free/FM-MobilePlatform/Module03/mobile-apps-fm-theory-module03.pdf). Обмены в целом работают стабильно, но при попытке передчи данных с мобильного на сервер возникает "Ошибка разбора XML [1,1] - Extra content at the end of the document". Т.е. какого-то фёдора на сервер попадет пустая XML, чего в принципе быть не должно (даже в пустом пакете будет минимум пару тегов). Если бывают проблемы со связью (нет инета), то и соединение с сервером (создание прокси) вовсе не происходит. А так прокси создаётся нормально, ошибка возникает уже при передаче данных серверу.

Кто что думает? Где искать причину - на мобильных устройствах или на сервере? Такое впечатление, что после установки соединения потом рубается связь.

ЗЫ: Если нужны куски кода, выложу.
1 lubitelxml
 
22.12.16
13:14
Платформы менять пробовал?
2 dave2000
 
22.12.16
13:21
(1) Только мобильные платформы меняли (8.3.6) - ситуация осталась. Серверную пока не трогали. Есть вероятность, что это сервер так куралесит?
3 lubitelxml
 
22.12.16
13:28
(2) может, 8.3.7 помниться глючная была
4 mobile-1c
 
22.12.16
13:54
были такие ошибки. попробуй убрать в обмене все объекты и последовательно найди тот объект который мешает обмену. возможно разная структура объекта проверь это.
5 dave2000
 
22.12.16
14:02
(4) С объектами все гуд, при разной структуре ругнётся на середину файла, а тут он со старта пустой [1,1]. Да и при разной структуре у нас проверка стоит, сразу ловится реквизит и объект которые не совпадают.

(3) Какую платформу посоветуете ставить, какая наиболее стабильная?
6 Dilgorp
 
22.12.16
14:09
(0) Такая ошибка часто возникает, если вместо XML приходит HTML (ошибки авторизации, права и т.д.). Дело не в платформе.
7 Dilgorp
 
22.12.16
14:11
Пример того что может прийти вместо XML

<html>
<head><title> A server error occurred. </title></head>
<h1> Аутентификация пользователя не выполнена.   </h1>
<hr/>
An error occurred processing this request.</html>
8 lubitelxml
 
22.12.16
14:33
(6) так вроде у него обмен падает не всегда. Как с одной парой логин\пароль может иногда не пускать?
9 Dilgorp
 
22.12.16
14:49
(8) авторизация это одна из возможных причин, нужно смотреть что в таких случаях приходит
10 dave2000
 
22.12.16
15:07
Код в мобильном приложении:

Функция ВыполнитьОбменДанными(ТекстОшибки = "") Экспорт
    
        Прокси = ПолучитьПрокси();
    Если Прокси = Неопределено Тогда
        ТекстОшибки = "Не удалось установить соединение.";
        Возврат Ложь;
    КонецЕсли;
    
    .......
    
        // Отправляем данные
    ДанныеОбмена = ОбменСервер.СформироватьПакетОбмена(ЦентральныйУзел, Прокси);   <------- Здесь пакет ХML успешно формируется
    Прокси.ЗаписатьДанные(ИмяУстройства, ДанныеОбмена);    <--------- ВОТ ЗДЕСЬ НА СЕРВЕРЕ ПРОИСХОДИТ ИСКЛЮЧЕНИЕ
    
        // Принимаем данные
    ДанныеОбмена = Прокси.ПолучитьДанные(ИмяУстройства);
    ОбменСервер.ПринятьПакетОбмена(ЦентральныйУзел, ДанныеОбмена);
    
    // Отправляем еще раз для снятия регистрации в ЦБ
    ДанныеОбмена = ОбменСервер.СформироватьПакетОбмена(ЦентральныйУзел,
    Прокси.ЗаписатьДанные(ИмяУстройства, ДанныеОбмена);
    

    Возврат Истина;
    
КонецФункции
11 dave2000
 
22.12.16
15:14
Код веб-сервиса ЗаписатьДанные() на стороне сервера:


Функция ЗаписатьДанные(ИмяУстройства, ДанныеМобильногоПриложения)

    УзелОбмена = ПланыОбмена.МобильноеПриложениеКонтрольКультур.НайтиПоКоду(ИмяУстройства);
    
    Если УзелОбмена.Пустая() Тогда
        ТекстИсключения = НСтр("ru='Неизвестное устройство: '") + ИмяУстройства;
        ВызватьИсключение(ТекстИсключения);
    КонецЕсли;

    СообщениеОбмена = ДанныеМобильногоПриложения.Получить();
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СообщениеОбмена);
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    
    //^^^^^ ВОТ НА ЭТОМ УЧАСТКЕ ВЫЛЕТАЕТ, ошибка разбора XML [1,1]
    
    //............
    //............
    //............
    
КонецФункции
12 dave2000
 
22.12.16
15:15
(11) PS: параметр ДанныеМобильногоПриложения имет тип ХранилищеЗначения
13 dave2000
 
22.12.16
15:19
Получается, что на стороне мобильного успешно формируется XML, а на стороне сервера уже почему-то пустая строка. Как такое может быть?
14 Dilgorp
 
22.12.16
16:59
(13) нужно смотреть что на самом деле получает сервер (записать СообщениеОбмена в файл, использовать отладку, записать в виде строки в любое хранилище).
15 DitriX
 
22.12.16
18:47
версия стационарной какая? и она скульная?
16 dave2000
 
22.12.16
18:56
(15) > Платформа сервера 1С 8.3.7.1917
Да, она SQL
17 DitriX
 
22.12.16
19:02
угу, уходи от скуля или обновись. Это баг стационарный я с 1С вместе его ловил долго. Они даже воспроизвести его не могли. Короче, весело было.
В 8.3.8 вроде уже исправили его.
А баг проявлялся только на скуле, изредка, при определнных размерах пакета, от 100кб до 200кб, вроде, не помню уже.
18 dave2000
 
22.12.16
21:47
(17) Спасибо, попробую на тестовый последнюю 8.3.8.2167 поставить, погоняем, посмотрим