V81.COMConnector: (VB.net) Как поймать ошибку аутентификации? #468474


#0 by Kiber
Использую COM-объект "V81.COMConnector" из VB.net, рассматриваемая цель - блокировка базы. Структура следующая: 1. Соединяюсь с агентом. 2. Получаю массив кластеров, перебираю их. 3. Прохожу аутентификацию на кластере с пустыми значениями 4. Получаю список рабочих процессов, перебираю их. 5. Открываю соединение с рабочим процессом. 6. Прохожу аутентификацию с логином и паролем, либо не использую аутентификацию, если использутеся NTLM. 7. Получаю список информационных баз, перебираю их. 8.1. (ОШИБКА) Пытаюсь изменить свойство ConnectDenied на True, выдает OutOfMemoryException. 8.2. Заполняю остальные параметры для блокировки базы. 9. Устанавливаю блокировку, вызвав метод UpdateInfoBase(<Информационная база>) соединения с рабочим процессом. Собственно, корень ошибки мне понятен - неправильно пройдена аутентификация. Однако, сама ошибка указывает либо не неправильную работу COM-объекта, либо неправильную работу С COM-объектом. Внимание, вопрос: Каким образом "правильно" проверить что аутентификация была пройдена успешно и что на информационную базу имеется нужный уровень доступа? Мысли: Смотрел несколько примеров блокировки базы с использованием COM-объектов, все примеры меняли свойство объекта, полученного указанным мною образом. Это, однако, не означает, что все эти примеры работали с COM-объектом так, как задумывалось разработчиками 1С. Это, в свою очередь, может означать, что полученный объект "информационная база" не предназначался для установки блокировки... Возможно, надо получить пустой объект "информационная база", заполнить его свойства и тогда при попытке вызывать метод UpdateInfoBase(<Информационная база>) соединения с рабочим процессом он выдаст ошибку, сгенерированную COM-объектом - "недостаточно доступа". Может-ли ошибка "OutOfMemoryException" возникать при попытке изменить read-only параметр COM-объекта? Если да, то как на .net проверить что параметр является read-only? Из мыслей сформулировались 2 варианта: 1. По другому (правильно) использовать com-объект для блокировки. 2. Проверить параметры COM-объекта таким образом, чтобы исключить ошибку (было предположение что они read-only).
#1 by Волшебник
Какой вариант выбрал?
#2 by Immortal
Попытка Исключение КонецПопытки
#3 by Kiber
Как оказалось, я объявлял com-объекты как объекты. После объявления com-объектов через класс самого com-объекта v8 исчезла ошибка OutOfMemory. Сама задача, по всей видимости, решается проверкой полученного com-объекта информационная база на заполненность свойств, которые должны быть заполнены если аутентификация была успешной. Либо можно продолжить выполнение кода и поймать исключение, вызванное уже самим com-объектом, с информацией типа "Недостаточно прав пользователя на информационную базу". Ага, только не очень приятно ловить OutOfMemory, хотя и знаешь в чем причина.
#4 by Immortal
не имеет значения, все операции с ком-объектом лучше обрабатывать безопасно
#5 by Kiber
Это само собой :) Просто сама ошибка будет уходить на почту. Стандартный handler говорит что это OutOfMemory... Поэтому хотелось исключить свою ошибку, чтобы когда получишь реальный OutOfMemory - не гадать что это - реальная ошибка, или неинициализированный com-объект.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С