![]() |
|
Хранить COMОбъект на серверной стороне в режиме web-клиента - сдаюсь | ☑ | ||
---|---|---|---|---|
0
mclarry
04.10.10
✎
15:36
|
По сути простая задача, не могу реализовать в 8.2 в режиме упр. приложения.
Есть база1 на 8.2, из которой надо постоянно запросами вытаскивать данные в базу2 8.2. Проблема в том, что для каждого нового запроса надо создавать com-соединение, а это дело не быстрое. Хотелось бы создать соединение только один раз. Но хранить его негде! Ни в переменной модуля управляемого приложения, ни в параметрах сеанса, ни даже в локальной переменной обработки! Думаю, что ли 1С это нарочно сделала, и я чего-то не понимаю? Уточнение: ссылка на com-соединение должна создаваться и храниться только на сервере, а не на клиентской стороне. Ибо клиенты заходят через web. |
|||
1
H A D G E H O G s
04.10.10
✎
15:37
|
ВременноеХранилище
|
|||
2
mclarry
04.10.10
✎
15:40
|
Описание:
Сохраняет сериализуемое значение во временное хранилище. А COMОбъект не сериализуется! Проходили... |
|||
3
H A D G E H O G s
04.10.10
✎
15:41
|
Доверься мне.
|
|||
4
mclarry
04.10.10
✎
15:43
|
{МодульУправляемогоПриложения(19)}: Ошибка при вызове метода контекста (ПоместитьВоВременноеХранилище)
ПоместитьВоВременноеХранилище(ОЛЕ_База, ИД); по причине: Ошибка помещения значение во временное хранилище по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'request': форма: Элемент имя: {http://v8.1c.ru/8.2/mngsrv/ws}request по причине: Ошибка отображения типов: Отсутствует отображение для типа 'COMОбъект' |
|||
5
mclarry
04.10.10
✎
15:46
|
Хм, а сохранить-то получилось... Момент...
|
|||
6
H A D G E H O G s
04.10.10
✎
15:54
|
МодульУправляемогоПриложения - Енто клиент.
|
|||
7
H A D G E H O G s
04.10.10
✎
15:55
|
И он захотел твоего сома на сервер отправить.
|
|||
8
mclarry
04.10.10
✎
15:59
|
да-да, уже понял
|
|||
9
H A D G E H O G s
04.10.10
✎
15:59
|
||||
10
mclarry
04.10.10
✎
16:07
|
Сохранить - да, а прочитать - нет:
{Форма.Форма.Форма(49)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища) ОЛЕ_База= ПолучитьИзВременногоХранилища(ОЛЕ_ИД); по причине: Ошибка получения значение из временного хранилища по причине: Неправильный путь к файлу '9cf5b7e3-8484-4990-9b37-24832bfd0d4d' |
|||
11
H A D G E H O G s
04.10.10
✎
16:09
|
(10) Код на запись и чтение приведи.
|
|||
12
mclarry
04.10.10
✎
16:13
|
ЗАПИСЬ
// Модуль упр приложения Перем ИД Экспорт; Процедура ПриНачалеРаботыСистемы() ИД= Новый УникальныйИдентификатор(); ГлобальныйМодуль.ОЛЕ(ИД); КонецПроцедуры // ГлобальныйМодуль Процедура ОЛЕ(ИД) Экспорт ОЛЕ_(ИД); КонецПроцедуры // ОЛЕ &НаСервере Процедура ОЛЕ_(ИД) Экспорт ОЛЕ_База= Новый COMОбъект("V82.Application"); ПоместитьВоВременноеХранилище(ОЛЕ_База, ИД); КонецПроцедуры // ОЛЕ ЧТЕНИЕ &НаКлиенте Процедура ПодключитьИБ(Команда) ПриСозданииОЛЕ_База(ИД); КонецПроцедуры &НаСервереБезКонтекста Процедура ПриСозданииОЛЕ_База(ОЛЕ_ИД) ОЛЕ_База= ПолучитьИзВременногоХранилища(ОЛЕ_ИД); КонецПроцедуры |
|||
13
H A D G E H O G s
04.10.10
✎
16:14
|
Не путай
|
|||
14
H A D G E H O G s
04.10.10
✎
16:14
|
УникальныйИдентификатор
и АдресХранилища |
|||
15
H A D G E H O G s
04.10.10
✎
16:15
|
АдресОбъекта=ПоместитьВоВременноеХранилище(ОЛЕ_База, ИД);
ОЛЕ_База=Неопределено; ОЛЕ_База=ПолучитьИзВременногоХранилища(АдресОбъекта); |
|||
16
H A D G E H O G s
04.10.10
✎
16:15
|
Проверь.
|
|||
17
mclarry
04.10.10
✎
16:15
|
Понял, вижу
|
|||
18
mclarry
04.10.10
✎
16:17
|
С ума сойти! Мил чел, погоди, - проверю под web и еще одну фишку...
|
|||
19
H A D G E H O G s
04.10.10
✎
16:19
|
И еще - сотри весь этот ... код и пиши вот так:
Процедура СоздатьОбработчик() Обработчик=Новый COMОбъект("v82.Application"); СтрокаПодключения=СтрокаСоединенияИнформационнойБазы(); Индекс=Найти(СтрокаПодключения,";"); СтрокаПодключения=Лев(СтрокаПодключения,Индекс); Обработчик.Connect(СтрокаПодключения+"usr=""robot""; pwd=""111"""); ПараметрыСеанса.АдресCOMОбработчика=ПоместитьВоВременноеХранилище(Обработчик,Новый УникальныйИдентификатор()); Обработчик.НачатьВыполнениеОбработкиЗаданий(); Обработчик.Visible=false; КонецПроцедуры Процедура ОстановитьОбработчик() Если ПараметрыСеанса.АдресCOMОбработчика<>"" Тогда Обработчик=ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресCOMОбработчика); Обработчик=Неопределено; Обработчик.ЗавершитьВыполнениеОбработкиЗаданий(); КонецПроцедуры |
|||
20
H A D G E H O G s
04.10.10
✎
16:20
|
Процедура ОстановитьОбработчик()
Если ПараметрыСеанса.АдресCOMОбработчика<>"" Тогда Обработчик=ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресCOMОбработчика); Обработчик.ЗавершитьВыполнениеОбработкиЗаданий(); КонецЕсли; КонецПроцедуры |
|||
21
mclarry
04.10.10
✎
16:23
|
С обработчиком - это чтоб как бы в фоновом режиме запускать, да?
|
|||
22
mclarry
04.10.10
✎
16:23
|
Под web работает, осталась одна неприятность...
|
|||
23
H A D G E H O G s
04.10.10
✎
16:25
|
(21) Да.
|
|||
24
H A D G E H O G s
04.10.10
✎
16:26
|
(22) Не томи
|
|||
25
mclarry
04.10.10
✎
16:32
|
Ошибка IE:
Интерфейс не поддерживается. Это когда работаем через web. В (22) был web с локальной машины - работало. |
|||
26
mclarry
04.10.10
✎
16:32
|
На коде:
ОЛЕ_База= Новый COMОбъект("V82.Application"); |
|||
27
H A D G E H O G s
04.10.10
✎
16:33
|
(26) Ты создаешь его НА КЛИЕНТЕ.
Делай на Сервере. |
|||
28
H A D G E H O G s
04.10.10
✎
16:34
|
(25) Либо на Серваке не стоит 1С - в виде приложения, а только Сервер 1С.
|
|||
29
H A D G E H O G s
04.10.10
✎
16:34
|
(25) Либо вообще Linux.
|
|||
30
mclarry
04.10.10
✎
16:35
|
Создаю как раз на сервере:
&НаСервере Процедура ОЛЕ_(ИД) Экспорт ОЛЕ_База= Новый COMОбъект("V82.Application"); ПоместитьВоВременноеХранилище(ОЛЕ_База, ИД); КонецПроцедуры // ОЛЕ |
|||
31
mclarry
04.10.10
✎
16:35
|
Сервак - это моя машина, на ней поднят IIS
|
|||
32
H A D G E H O G s
04.10.10
✎
16:36
|
Да, кстати. Такая фишка на Веб клиенте, как:
ОЛЕ_База= Новый COMОбъект(""); прокатит только для IE. Огнелис COM не поддерживает. Так-то %username% Это было лирическое отступление. (31) На Серваке 1С стоит?? |
|||
33
mclarry
04.10.10
✎
16:39
|
Говорю же, есть моя машина, на ней 1С 8.2, на ней же IIS
|
|||
34
H A D G E H O G s
04.10.10
✎
16:45
|
(33) Попробуй на своей машине (серваке) в Толстом клиенте, в обычной форме выполнить
ОЛЕ_База= Новый COMОбъект("V82.Application"); |
|||
35
mclarry
04.10.10
✎
16:47
|
(34) Да нет, проблема в web-браузере. Сейчас поясню.
|
|||
36
mclarry
04.10.10
✎
16:49
|
Запуск через http://10.3.1.53/Portal дает ошибку:
ОбщийМодуль.ГлобальныйМодуль.Модуль(10)}: Ошибка при вызове конструктора (COMОбъект) ОЛЕ_База= Новый COMОбъект("V82.Application"); по причине: Интерфейс не поддерживается Запуск через http://localhost/Portal отрабатывает без проблем: COMОбъект создается, сохраняется и восстанавливается. |
|||
37
H A D G E H O G s
04.10.10
✎
16:51
|
(36)
1)Физически разные серваки 2) Разные уровни безопасности IIS для разного доступа (возможно, я IIS в глаза не видел). |
|||
38
mclarry
04.10.10
✎
16:52
|
Возможно, у пользователя, под которым запускается процесс, нет прав на создание COM-объектов. Плохо, с этим могу и не разобраться...
|
|||
39
H A D G E H O G s
04.10.10
✎
16:53
|
(38) Не.
В обоих вариантах - работа идет с одним и тем же процессом IIS, если все верно. |
|||
40
mclarry
04.10.10
✎
16:56
|
ХЗ
Разница - на лицо |
|||
41
H A D G E H O G s
04.10.10
✎
17:04
|
Ковыряй, ты где-то недоглядел.
|
|||
42
mclarry
04.10.10
✎
17:27
|
Расковырял, о чудо.
А теперь Last, but not least. Не работает код: ОЛЕ_База= Новый COMОбъект("V77S.Application"); DEP отключил. Правда, не помню, перегружался или нет после этого. |
|||
43
H A D G E H O G s
04.10.10
✎
17:49
|
(42) гммм.
DEP - защита от вредоносного ПО? |
|||
44
H A D G E H O G s
04.10.10
✎
17:49
|
DEP отключил - и?
1) Заработало v82.application ? 2) Перестало работать V77S.Application ? |
|||
45
mclarry
04.10.10
✎
18:01
|
Не, "Интерфейс не поддерживается" не могу побороть. Локально работает, при подключении с другой машины не работает. С 77 пока нет смысла разбираться.
|
|||
46
H A D G E H O G s
04.10.10
✎
18:04
|
(45) Корвыряй настройки IIS-а.
Надо как-нибудь себе поставить, с геммороем подороться. А то все безглючный Апач, Апач, расслабляет. |
|||
47
mclarry
04.10.10
✎
18:06
|
Нет, все-таки раскопал. Фишка в самой 77. Иногда COMОбъект создается, иногда нет. Сейчас скажу точно, при каких условиях.
|
|||
48
mclarry
04.10.10
✎
18:16
|
Странно. Если на сервере, роль которого сейчас выполняет моя машина, запущен хотя бы один процесс 7.7 под локальным пользователем, то попытка создать COMОбъект("V77S.Application") терпит неудачу. Возможно, из-за того, что из-под web-клиента работает другой пользователь Windows. Если нет локальных процессов 77, все работает, причем можно запускать сколько угодно web-соединений.
H A D G E H O G s - респект. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |