Имя: Пароль:
1C
 
Передача файла через веб-сервисы
0 white_tiger
 
13.10.14
15:04
Доброго времени суток!
Обращаюсь со следующим вопросом: как передать готовый хмл-файлик с данными через веб-сервис на мобильное приложение?он лежит,предположим,в папке,я его оттуда тащу и засовываю в хранилище значений, вот код веб-сервиса:
Функция ReceiveMessage(SourceNode, ReceiverNode)
     Попытка
    ИмяФайла = "C:\Users\Администратор\AppData\Local\Temp\2\Message001_002.xml";
    Хранилище = Новый ХранилищеЗначения(ИмяФайла);
Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Возврат Хранилище;    
    КонецФункции
тип возвращаемого значения valueStorage
На стороне мобильной конфы пишу:
        Прокси = ПолучитьПрокси();
    SourceNode = УзелИБ.Код;
    ReceiverNode = ТекУзел.Код;
    ФайлВебСервиса = Прокси.ReceiveMessage(SourceNode, ReceiverNode);
    ИмяХМЛСообщения = ФайлВебСервиса.Получить();

Все это добро вылетает с сообщением "Файл не обнаружен C:\Users\Администратор\AppData\Local\Temp\2\Message001_002.xml". хотя он там есть.

подскажите,пожалуйста, что не так?
p.s. основная база периодически сообщает "ошибка исключительной блокировки информационной базы. ошибка разделения прав доступа" и не хочет обновляться. раньше работало нормально, пользователи вроде на месте. с чего бы так?
версия моб. платформы 8.3.5.63, основная база файловая УТП 2.0.5.4, стоит на платформе 8.3.5.1068
1 mzelensky
 
13.10.14
15:17
(0) Сперва помести файл в двоичные данные, а потом записывай в хранилище.

+ Ты все это пытаешься выполнить на сервере или клиенте ?
2 mzelensky
 
13.10.14
15:18
(1) + Лучше не клади файл в этот путь:

C:\Users\Администратор\AppData\Local\Temp

Попробуй (для теста) просто
3 mzelensky
 
13.10.14
15:19
Блин.
(2) + Попробуй (для теста) просто в

C:\Test\Message001_002.xml
4 mzelensky
 
13.10.14
15:20
Вообще прикольно конечно послушать твои мысли по поводу вот этого

    ИмяФайла = "C:\Users\Администратор\AppData\Local\Temp\2\Message001_002.xml";
    Хранилище = Новый ХранилищеЗначения(ИмяФайла);

Вот что система, по твоему, должна сделать?
5 white_tiger
 
14.10.14
06:23
(1) функция в веб-сервисе, остальное на сервере
спасибо,сейчас попробую
6 white_tiger
 
14.10.14
06:38
даже по отладке застревает на имени файла, не видит даже в  "C:\TempFiles\Message001_002.xml". может,с правами глюк?
7 sda553
 
14.10.14
07:09
(0) Я ни фига не понял, что происходит?
Мобильное приложение, используя путь c:\usersчегототам пытается прочитать чего то там в своем мобильном приложении?

Файл передают через веб сервис, использую предварительно его кодирование в base64
8 white_tiger
 
14.10.14
07:33
так вот и нужно передать файл ч/з веб-сервис, выходит,в модуле веб-сервиса я получаю файл(он уже готов,поэтому ищу по пути), потом на мобильном приложении обращаюсь к веб-сервису и цепляю оттуда файл.
получается, нужно просто его преобразовать в двоичные данные и необязательно потом тащить в хранилище? поясните этот момент,пожалуйста
9 Cube
 
14.10.14
07:39
(8) У тебя что, два веб-сервиса участвуют в этой операции?
10 white_tiger
 
14.10.14
07:50
(9) пока 1
11 Cube
 
14.10.14
07:54
(10) У тебя база клиент-серверная или файловая?
Если клиент-серверная, то файл ищется по указанному тобой пути на сервере, а не на клиенте...
12 white_tiger
 
14.10.14
07:58
(11)файловая
13 white_tiger
 
14.10.14
08:55
снова "ошибка исключительной блокировки информационной базы. ошибка разделения доступа к базе данных" ((
14 Krolik Bezobraznik
 
14.10.14
09:09
(0) Что подразумеваешь под моб приложением?
15 Ranger_83
 
14.10.14
09:15
отладчиком смотрел?
16 white_tiger
 
14.10.14
09:16
(14) нужно получить хмл-файл на моб.устройстве, там небольшая самописная конфа с планом обмена
17 white_tiger
 
14.10.14
09:16
(15) отладчик не заходит, все сразу же валилось,на имени файла
18 arccos6pi
 
14.10.14
09:23
я файлик передаю так
typeFile = ФабрикаXDTO.Тип("http://какое-то имяu", "File");
    ТипДвоичныеДанные = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "base64Binary");
    ТипСообщения =  ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "string");
    текФайл = ФабрикаXDTO.Создать(typeFile);
    ИмяФайла = ПолучитьИмяВременногоФайла("mxl");
................................

ДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
    текФайл.binaryData = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ДанныеФайла);
    текФайл.message = "ok";
    текФайл.ext = ФабрикаXDTO.Создать(ТипСообщения,"mxl");
    
    Возврат текФайл;

а возвращет метод вебсервиса строку
и все прекрасно работает
19 white_tiger
 
14.10.14
12:59
загнала код в попытку,ругается теперь на "extra content at the end of the document"
20 Serginio1
 
14.10.14
15:13
21 Serginio1
 
14.10.14
15:17
20+ передавай Двоичные данные

Или

Метод должен возвращать base64Binary (http://www.w3.org/2001/XMLSchema)


ддФайлЭксель = Новый ДвоичныеДанные(НаименованиеФайла);
    
    ТипДвоичныеДанные    = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema";, "base64Binary");
    ДвоичныеДанные      = ФабрикаXDTO.Создать(ТипДвоичныеДанные,ддФайлЭксель);