Работа Native API компоненты RusGuardSoft на сервере

1. Xershi 1486 15.02.24 16:30 Сейчас в теме
Приветствую, коллеги!
Столкнулся с проблемой.
1С:Предприятие 8.3 (8.3.21.1709)
Установлен 1С мини сервер. СУБД постгри.
Используется компонента для работы со СКУД:
Внешняя компонента NativeApi и тестовая база с описанием всех методов для интеграции RusGuardSoft в 1с
Компонента написана по технологии Native API.
Из каркасной конфигурации разработчика по ссылке выше был использован метод:
РгСофт = Новый("AddIn.RgSoft.RgSoftExtension");
s = "";
Ин = РгСофт.GetEmployeePositions(s);

При компиляции кода "на клиенте" ошибки нету, а при компиляции кода "на сервере", возникает ошибка работы ВК.
Не может быть это связано с ограничениями мини сервера? Или какими то еще проблемами?
Я думал проблему решу как в прошлый раз Подключение OLE в регламентном задании на 64-битном сервере. Но не помогло. Куда копать?
У ВК есть много методов. Сначала мы ее устанавливаем работает везде. Далее мы получаем информацию о ВК работает везде, далее инициализируем подключение работает везде. Потом уже идет получение данные из бд СКУД. Это работа по сети ВК обращается к СКУД и получает оттуда данные далее отдает нам. Разработчик говорил, что подымается соап запрос с безопасным ключом или что-то подобное. Итог на клиенте работает, а на сервере падает.
Работал под USR1CV8 тоже самое на клиенте работает, а на сервере нет.
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
2. Xershi 1486 25.03.24 15:08 Сейчас в теме +0.01 $m
Как оказалось вся проблема была в том что на клиенте ВК один раз инициализируется и код работает с одним экземплятором.
А на сервере ВК нужно каждый раз инициалзировать и проходить все круги ада работы ВК.
&НаСервере
Функция ПолучитьКомпонентуНаСервере()
	
	РгСофт = Неопределено;
	
	Местоположение = "ОбщийМакет.RgSoftExtension";
	
	Если ПодключитьВнешнююКомпоненту(Местоположение, "RgSoft", AddInType.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно) Тогда
		РгСофт = Новый("AddIn.RgSoft.RgSoftExtension");
	Иначе
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось установить или подключить РусГвард RgSoft");
	КонецЕсли;
	
	Возврат РгСофт;
	
КонецФункции


&НаСервере
Процедура НайтиСотрудникаПоКартеНаСервере()
	
	РгСофтСервер = ПолучитьКомпонентуНаСервере();
	
	Если РгСофтСервер <> Неопределено Тогда
		
		ОтветПодключения = "";
		
		РезультатПодключения = РгСофтСервер.Initialize(Объект.АдресСервера, Объект.Логин, Объект.Пароль, ОтветПодключения);
		
		ИДСотрудника		= "";
		ОписаниеСотрудника	= "";
		
		РезультатПоиска = РгСофтСервер.GetAssignedAcsKeyByKeyNumber(НомерКарты, ИДСотрудника, ОписаниеСотрудника);
		
		РезультатОтключения = РгСофтСервер.Deinitialize();
		
		РгСофтСервер = Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры
Показать

К сожалению разработчик про эту особенность не упомянул, а отладка на этот не очевидный трюк не давала ответа, ВК падала. В ходе переписки с разработчиком не удалось получить рабочий пример с кодом на сервере, но с его скринов стало понятно, что что-то не так и тут опыт других проектов подсказал, что скорее всего дело в не последовательных вызовах ВК. Это и решило проблему, код для ознакомления предоставил.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1486 25.03.24 15:08 Сейчас в теме +0.01 $m
Как оказалось вся проблема была в том что на клиенте ВК один раз инициализируется и код работает с одним экземплятором.
А на сервере ВК нужно каждый раз инициалзировать и проходить все круги ада работы ВК.
&НаСервере
Функция ПолучитьКомпонентуНаСервере()
	
	РгСофт = Неопределено;
	
	Местоположение = "ОбщийМакет.RgSoftExtension";
	
	Если ПодключитьВнешнююКомпоненту(Местоположение, "RgSoft", AddInType.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно) Тогда
		РгСофт = Новый("AddIn.RgSoft.RgSoftExtension");
	Иначе
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не удалось установить или подключить РусГвард RgSoft");
	КонецЕсли;
	
	Возврат РгСофт;
	
КонецФункции


&НаСервере
Процедура НайтиСотрудникаПоКартеНаСервере()
	
	РгСофтСервер = ПолучитьКомпонентуНаСервере();
	
	Если РгСофтСервер <> Неопределено Тогда
		
		ОтветПодключения = "";
		
		РезультатПодключения = РгСофтСервер.Initialize(Объект.АдресСервера, Объект.Логин, Объект.Пароль, ОтветПодключения);
		
		ИДСотрудника		= "";
		ОписаниеСотрудника	= "";
		
		РезультатПоиска = РгСофтСервер.GetAssignedAcsKeyByKeyNumber(НомерКарты, ИДСотрудника, ОписаниеСотрудника);
		
		РезультатОтключения = РгСофтСервер.Deinitialize();
		
		РгСофтСервер = Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры
Показать

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот