Имя: Пароль:
1C
 
Возможно ли засунуть Новый WSПрокси в глобальную переменную?
,
0 Mr-FReSH
 
25.09.19
14:31
Доброго времени суток, собственно сабж. Пишу мобильное приложение и там все на обменах. Для этого использую WSПрокси, но на то, чтобы каждый раз получать его заново уходит достаточно много времени и это заметно пользователю.
Пробовал в модуле управляемого приложения объявить переменную:

&НаСервере
Перем Прокси Экспорт;

Процедура ПриНачалеРаботыСистемы()
    МойСерверныйОбщийМодуль.ЗаполнитьПрокси();
КонецПроцедуры

Но когда я пытаюсь увидеть эту переменную в модуле формы или получить эту переменную из другого серверного общего модуля (да даже из этого же), то получаю ошибку.
1 butterbean
 
25.09.19
14:33
через параметрСеанса делай
2 Mr-FReSH
 
25.09.19
14:34
(1) Думал об этом, но какой тогда тип выбирать? Там подобного нет, даже "Произвольный" нет
3 butterbean
 
25.09.19
14:36
(2) можно через ХранилищеЗначения
4 Cyberhawk
 
25.09.19
14:36
Или фикс. структуру
5 Mr-FReSH
 
25.09.19
14:37
(4) (3) Попробую, по результату отпишусь
6 Mr-FReSH
 
25.09.19
14:41
ээх

Фиксированный массив, фиксированное соответствие или фиксированная структура содержит значение(я) недопустимого типа
7 Сияющий в темноте
 
25.09.19
14:41
так переменная на сервере живет,пока выполняется код.
то есть на каждый вызов будет новая переменная.
8 Mr-FReSH
 
25.09.19
14:45
(5) В Хранилище значения Прокси тоже не хочет садиться
9 Mr-FReSH
 
25.09.19
14:45
по крайней мере через Хранилище = Новый ХранилищеЗначения(Прокси);
10 Cyberhawk
 
25.09.19
14:46
(9) Прокси в структуру, структуру в ХЗ?
11 Cyberhawk
 
25.09.19
14:47
Ну и хранить адрес ВХ, привязанный к сгенерированному УИДу, а не в открытом виде
12 Провинциальный 1сник
 
25.09.19
14:47
Между серверными вызовами можно хранить только то, что можно сериализовать. По честному, сериализовать внешний объект невозможно, поскольку он существует лишь в контексте и в памяти серверного процесса. Однако, если принять за вводную, что серверный процесс всего один - то есть способы. Один из них вам уже сказали - засунуть несереализуемое в структуру и сохранить её в хранилище. Второй - сделать общий модуль с флагом кэширования и повторного возвращения значений, возвращающий из функции этот самый внешний объект.
Оба способа имеют общую проблему. Хранилище без привязки к форме, равно как и кэш, протухает через несколько минут. Да, и если вдруг десериализация внезапно произойдет на другом рабочем процессе, то ваш объект превратиться в тыкву настолько, что может даже упасть рабочий процесс..
13 Mr-FReSH
 
25.09.19
14:50
(12) Конструктивно... на выходе мы имеем картину, что по хорошему и надежному мы никак не сохраним проксю и каждый раз придется получать ее заново? Я сейчас попробую засунуть прокси в структуру и в хранилище и хранить уид его. Посмотрю на сколько это корректно
14 Провинциальный 1сник
 
25.09.19
14:50
+(12) Как вариант, структуру с бякой внутри можно попробовать сериализовать через ЗначениеВФайлВнутр на сервере, и после загружать аналогично. Это если без хранилища.
15 Mr-FReSH
 
25.09.19
14:53
(11) Создал Фиксированную структуру, с прокси и попытался положить в Хранилище, на выходе...

Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент
16 Mr-FReSH
 
25.09.19
14:54
(14) Эту структуру не много не понял, можно пример с кодом?
17 Провинциальный 1сник
 
25.09.19
15:01
(16) Сохранение

Структ=Новый Структура;
Структ.Вставить("Объект",НесериализуемыйОбъект);
ЗначениеВФайлВнутр(ИмяФайла,Структ);

Ну и обратный порядок

Структ=ЗначениеИзФайла(ИмяФайла);
НесериализуемыйОбъект=Структ.Объект;

PS Не проверял)
18 Cyberhawk
 
25.09.19
15:02
(15) Прикрыли-таки лавочку значит
19 Mr-FReSH
 
25.09.19
15:10
(17) В рамках мобильного приложения мне кажется не лучший вариант...
но все равно попробую)
20 Mr-FReSH
 
25.09.19
15:13
Есть ЗначениеВФайл и ЗначениеВСтрокуВнутр

какой?)
21 Провинциальный 1сник
 
25.09.19
15:15
(20) Попробуй и то и другое, и в файл и в строковую переменную - реквизит.
22 Mr-FReSH
 
25.09.19
15:20
ЗначениеВФайл недоступно в мобильном приложении =(
23 Mr-FReSH
 
25.09.19
15:21
Также как и ЗначениеВСтрокуВнутр...
24 Провинциальный 1сник
 
25.09.19
15:24
(22) На сервере тоже?
25 ptiz
 
25.09.19
15:35
Правильный ответ - в (12): Общий модуль с повторно возвращаемыми значениями.
26 aleks_default
 
25.09.19
15:37
(25)+1 В ERP так
27 Mr-FReSH
 
25.09.19
15:40
(24) На сервере доступно, но на сервере в моб приложении нет =)
28 Mr-FReSH
 
25.09.19
15:41
Ладно, тогда я просто сдаюсь, потому что боюсь что хешируемые модули в моб. приложении также будет работать через ЭН-ное место
29 runoff_runoff
 
25.09.19
15:42
а как насчет сделать веб-сервис в расширении?.. тут только вопрос.. остается ли он "горячим" после первого обращения..
30 Cyberhawk
 
25.09.19
15:44
(29) Так он не поставщик, а потребитель веб-сервиса. Ему прокси закешировать хочется. Как тут веб-сервис в расширении поможет? )
31 Cyberhawk
 
25.09.19
15:44
(28) Есть же рабочий стол в мобильном приложении, клади в ВХ с УИДом этой формы
32 Mr-FReSH
 
25.09.19
15:54
(31) всмысле уид всей формы засунуть в хранилище? =)
33 Mr-FReSH
 
25.09.19
15:54
потом получать форму с уидом, внутри которой прокси?
34 Cyberhawk
 
25.09.19
15:57
(32) В метод помещения в ВХ передаешь не произвольный УИД, а УИД формы. Если тебе удастся сериализовать несериализуемое, конечно.
35 Mr-FReSH
 
25.09.19
15:59
(34) Мне кажется не получится, потому что ИМХО он начал проверять все элементы, которые я пытаюсь поместить...

Я сейчас поймал себя на мысли, что никогда не сталкивался с модулями с повторно возвращаемыми значениями и не знаю как с ними работать. Сейчас нашел статью на инфостарте, но если кто вкратце напишет как с этим работать, буду примного благодарен.
36 Mr-FReSH
 
25.09.19
16:03
Почитал статью, http://catalog.mista.ru/public/668213/

Вырезка:

Чего делать нельзя
Есть одно ограничение. В качестве параметров функций можно указывать только простые типы. Неопределено, Null, Булево, Дата, Строка, Число, Ссылка. НИКАКИХ СТРУКТУР, ТАБЛИЦ ЗНАЧЕНИЙ, ОБЪЕКТОВ и т.п. Если вы попытаетесь передать в качестве параметра, например, структуру - все отработает, но о повторном использовании полученного значения можете забыть.

Возвращаемое значение при этом может быть любого типа.

Также, стоит обращать внимание на размер данных которые вы кэшируете. Всю память сервера вы забьете вряд ли, но помнить о том, что ресурсы не бесконечны стоит.

Следовательно засунуть туда прокси не выйдет...
37 mikecool
 
25.09.19
16:06
(36) не засунуть туда, а модуль должен возвращать прокси
38 Mr-FReSH
 
25.09.19
16:07
(37) Попробую, тогда, по замеру производительности посмотрю работает или нет =)
39 d4rkmesa
 
25.09.19
16:16
(38) А сколько сейчас WSПрокси создается?
40 Mr-FReSH
 
25.09.19
16:17
Вроде работает... Сделал общий модуль с 1 процедурой получения прокси в рамках сеанса. Посмотрю как будет дальше.

Спасибо всем, кто принял участие
41 Mr-FReSH
 
25.09.19
16:18
(39) Первый вызов 1.8 секунды, второй и последующий 0,008 секунды
42 runoff_runoff
 
25.09.19
16:22
(30) объект конфигурации WSСсылка
Независимо от того, куда вы едете — это в гору и против ветра!