Тип: Лицензия, Неопределено. Содержит информацию о серверной лицензии, используемой рабочим процессом. Неопределено - рабочий процесс не использует серверную лицензию.
Полное описание, параметры и ограничения
Рабочий процесс.License (IWorkingProcessInfo.License)
Рабочий процесс (IWorkingProcessInfo)
License (License)
Доступен, начиная с версии 8.2.
Использование:
Только чтение.
Описание:
Тип: Лицензия, Неопределено.
Содержит информацию о серверной лицензии, используемой рабочим процессом.
Неопределено - рабочий процесс не использует серверную лицензию.
Доступность:
Интеграция.
Примечание:
Рабочий процесс использует серверную лицензию только, если имеется хотя бы одно соединение клиентского приложения с информационной базой через этот рабочий процесс.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Прочитать процесс и лицензии, не меняя кластер и не выгружая ключи
У выбранного собственного сеанса проверяем необязательный рабочий процесс, все двадцать его полей и краткий безопасный разбор лицензии.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Только собственный изолированный тестовый кластер на Windows. Зарегистрированная в нём база называется guide-owned-session-lab, имя конфигурации этой базы УчебнаяБазаСеансов. Запустите в ней отдельный учебный клиент.
Создайте собственную обработку с управляемой формой. Вставьте весь код одного урока в модуль этой формы и свяжите команду Прочитать с обработчиком Прочитать. Серверная часть должна исполняться на Windows. Уроки заменяют весь модуль, а не добавляют шесть одинаковых функций.
V85.COMConnector должен быть уже зарегистрирован администратором на Windows-сервере 1С с подходящей разрядностью. Пример ничего не устанавливает и не регистрирует. Если COM недоступен, остановитесь и обратитесь к администратору тестового стенда.
В форме собственной обработки создайте строковые реквизиты КлючКластера, ИмяАгента, ПарольАгента, ИмяАдминистратора, ПарольАдминистратора и числовой НомерСеанса. Для полей паролей включите режим пароля, не сохраняйте значения в настройках формы.
КлючКластера вручную возьмите из собственной консоли администрирования: имя кластера|имя сервера|основной порт, например Учебный|localhost|1541. Это порт кластера, не порт агента 1540 и не порт RAS 1545.
Серверный код связывается только с агентом 127.0.0.1:1540 на том Windows-сервере, где исполняется модуль. Вводятся существующие учебные учётные данные агента и кластера; права и пароли не изменяются.
Клиентский обработчик приведён полностью: он очищает поля паролей до вызова сервера и не печатает аргументы или технический текст ошибок. Это не гарантирует безопасное стирание строк из памяти; учебные учётные данные не должны сохраняться в настройках формы.
Сначала НомерСеанса = 0: получите только ID и AppID сеансов этой учебной базы. Затем введите один ID из этого списка. ID уникален внутри информационной базы, а не во всём кластере.
Ниже дан законченный серверный пример получения настоящего объекта Сеанс, а не функция, требующая неизвестный ИсходныйОбъект. COM и кластер при подготовке руководства не запускались; требуется ручной запуск на собственном стенде.
&НаКлиенте
Процедура Прочитать(Команда)
ЛокальныйПарольАгента = ПарольАгента;
ЛокальныйПарольАдминистратора = ПарольАдминистратора;
ПарольАгента = "";
ПарольАдминистратора = "";
Попытка
Отчет = ПрочитатьУчебныйСеанс(КлючКластера, ИмяАгента, ЛокальныйПарольАгента, ИмяАдминистратора, ЛокальныйПарольАдминистратора, НомерСеанса);
Исключение
ЛокальныйПарольАгента = "";
ЛокальныйПарольАдминистратора = "";
Сообщить("Чтение не выполнено. Проверьте собственный стенд, COM, ключ кластера, права и наличие выбранного сеанса. Технические сведения проверяет администратор стенда.");
Возврат;
КонецПопытки;
ЛокальныйПарольАгента = "";
ЛокальныйПарольАдминистратора = "";
Сообщить(Отчет);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПрочитатьУчебныйСеанс(КлючКластера, ИмяАгента, ПарольАгента, ИмяАдминистратора, ПарольАдминистратора, НомерСеанса)
Если ПустаяСтрока(КлючКластера) Тогда
ВызватьИсключение "Укажите точный ключ собственного тестового кластера";
КонецЕсли;
Если НомерСеанса < 0 Или Цел(НомерСеанса) <> НомерСеанса Тогда
ВызватьИсключение "Номер сеанса должен быть целым неотрицательным числом";
КонецЕсли;
Соединитель = Новый COMОбъект("V85.COMConnector");
Агент = Соединитель.ConnectAgent("127.0.0.1:1540");
Агент.AuthenticateAgent(ИмяАгента, ПарольАгента);
ПодходящиеКластеры = Новый Массив;
Для Каждого Кандидат Из Агент.GetClusters() Цикл
КлючКандидата = СтрШаблон("%1|%2|%3", Кандидат.ClusterName, Кандидат.HostName, Кандидат.MainPort);
Если НРег(КлючКандидата) = НРег(КлючКластера) Тогда
ПодходящиеКластеры.Добавить(Кандидат);
КонецЕсли;
КонецЦикла;
Если ПодходящиеКластеры.Количество() <> 1 Тогда
ВызватьИсключение "Собственный тестовый кластер не выбран однозначно";
КонецЕсли;
Кластер = ПодходящиеКластеры.Получить(0);
Агент.Authenticate(Кластер, ИмяАдминистратора, ПарольАдминистратора);
УчебныеБазы = Новый Массив;
Для Каждого ОписаниеБазы Из Агент.GetInfoBases(Кластер) Цикл
Если ОписаниеБазы.Name = "guide-owned-session-lab" Тогда
УчебныеБазы.Добавить(ОписаниеБазы);
КонецЕсли;
КонецЦикла;
Если УчебныеБазы.Количество() <> 1 Тогда
ВызватьИсключение "Зарегистрированная учебная база не выбрана однозначно";
КонецЕсли;
УчебнаяБаза = УчебныеБазы.Получить(0);
УчебныеСеансы = Агент.GetInfoBaseSessions(Кластер, УчебнаяБаза);
СтрокиОтчета = Новый Массив;
НайденныеСеансы = Новый Массив;
Для Каждого КандидатСеанс Из УчебныеСеансы Цикл
Если НомерСеанса = 0 Тогда
СтрокиОтчета.Добавить(СтрШаблон("Сеанс %1; приложение %2", КандидатСеанс.SessionID, КандидатСеанс.AppID));
ИначеЕсли КандидатСеанс.SessionID = НомерСеанса Тогда
НайденныеСеансы.Добавить(КандидатСеанс);
КонецЕсли;
КонецЦикла;
Если НомерСеанса = 0 Тогда
Если СтрокиОтчета.Количество() = 0 Тогда
Возврат "В учебной базе сейчас нет сеансов";
КонецЕсли;
Возврат СтрСоединить(СтрокиОтчета, Символы.ПС);
КонецЕсли;
Если НайденныеСеансы.Количество() <> 1 Тогда
ВызватьИсключение "Учебный сеанс исчез или не выбран однозначно; обновите список";
КонецЕсли;
Сеанс = НайденныеСеансы.Получить(0);
Если Сеанс.InfoBase.Name <> "guide-owned-session-lab" Тогда
ВызватьИсключение "Сеанс не принадлежит выбранной учебной базе";
КонецЕсли;
РабочийПроцесс = Сеанс.Process;
Если РабочийПроцесс = Неопределено Тогда
СтрокиОтчета.Добавить("Рабочий процесс сеансу сейчас не назначен");
Иначе
СтрокиОтчета.Добавить(СтрШаблон("PID=%1; порт=%2; начало=%3", РабочийПроцесс.PID, РабочийПроцесс.MainPort, РабочийПроцесс.StartedAt));
СтрокиОтчета.Добавить(СтрШаблон("Адрес процесса заполнен=%1; Running=%2; Use=%3", Не ПустаяСтрока(РабочийПроцесс.HostName), РабочийПроцесс.Running, РабочийПроцесс.Use));
СтрокиОтчета.Добавить(СтрШаблон("Требуется запуск: IsEnable=%1; TurnedOn=%2", РабочийПроцесс.IsEnable, РабочийПроцесс.TurnedOn));
СтрокиОтчета.Добавить(СтрШаблон("Соединений=%1; средних потоков=%2; выборка вызовов=%3", РабочийПроцесс.Connections, РабочийПроцесс.AvgThreads, РабочийПроцесс.SelectionSize));
СтрокиОтчета.Добавить(СтрШаблон("Виртуальная память, КБ=%1; превышение критического объёма, с=%2", РабочийПроцесс.MemorySize, РабочийПроцесс.MemoryExcessTime));
СтрокиОтчета.Добавить(СтрШаблон("Относительная производительность=%1; доступная производительность=%2", РабочийПроцесс.Capacity, РабочийПроцесс.AvailablePerfomance));
СтрокиОтчета.Добавить(СтрШаблон("Средние времена в исходной единице API: вызов=%1; сервер=%2; СУБД=%3; менеджер блокировок=%4", РабочийПроцесс.AvgCallTime, РабочийПроцесс.AvgServerCallTime, РабочийПроцесс.AvgDBCallTime, РабочийПроцесс.AvgLockCallTime));
ДобавитьРазборЛицензии(СтрокиОтчета, РабочийПроцесс.License, "Серверная лицензия процесса");
КонецЕсли;
ДобавитьРазборЛицензии(СтрокиОтчета, Сеанс.License, "Клиентская лицензия сеанса");
Возврат СтрСоединить(СтрокиОтчета, Символы.ПС);
КонецФункции
&НаСервереБезКонтекста
Процедура ДобавитьРазборЛицензии(СтрокиОтчета, Лицензия, Назначение)
Если Лицензия = Неопределено Тогда
СтрокиОтчета.Добавить(Назначение + ": сведения не назначены");
Возврат;
КонецЕсли;
СтрокиОтчета.Добавить(СтрШаблон("%1: тип=%2; получена сервером=%3; аппаратный сетевой ключ=%4", Назначение, Лицензия.LicenseType, Лицензия.IssuedByServer, Лицензия.Net));
СтрокиОтчета.Добавить(СтрШаблон("Максимум пользователей: комплект=%1; текущий ключ/файл=%2", Лицензия.MaxUsersAll, Лицензия.MaxUsersCur));
СтрокиОтчета.Добавить(СтрШаблон("Файл указан=%1; краткое представление заполнено=%2; полное заполнено=%3", Не ПустаяСтрока(Лицензия.FileName), Не ПустаяСтрока(Лицензия.ShortPresentation), Не ПустаяСтрока(Лицензия.FullPresentation)));
СтрокиОтчета.Добавить(СтрШаблон("Адрес получателя указан=%1; PID указан=%2; порт=%3; серия/номер комплекта указан=%4", Не ПустаяСтрока(Лицензия.RMngrAddress), Не ПустаяСтрока(Лицензия.RMngrPID), Лицензия.RMngrPort, Лицензия.Series <> 0));
КонецПроцедурыРазбор по шагам
Process может отсутствовать. При наличии это реальный рабочий процесс сеанса, не самостоятельно созданная структура с похожими полями.
MemorySize — виртуальная память процесса в килобайтах, MemoryExcessTime — секунды превышения критического значения. Это не MemoryCurrent сеанса.
PID имеет тип Строка, Running и Use — числа; IsEnable и TurnedOn — логические требования запуска, не доказательство, что процесс уже работает.
Use: 0 не использовать, 1 использовать, 2 резервный. Capacity — относительная производительность, не число CPU. AvailablePerfomance именно так написано в API.
У AvgCallTime/AvgDBCallTime/AvgLockCallTime/AvgServerCallTime установленное описание не задаёт единицу времени. Код не объявляет её секундами и не делает неподтверждённый пересчёт.
License у процесса серверная, у сеанса клиентская. Обе допускают Неопределено; одна процедура обрабатывает эти случаи.
LicenseType: 0 программная, 1 аппаратная. MaxUsersCur — максимум текущего ключа/файла, не свободные места и не текущее число пользователей.
Путь файла лицензии, её представления, адрес/PID получателя и регистрационный номер не выгружаются: читается только заполненность. Файл не открывается.
Как проверить результат
В отчёте присутствуют все назначенные группы параметров; при отсутствии процесса/лицензии показано понятное сообщение.
Не задано новых значений Use, IsEnable или TurnedOn; состояние кластера не меняется.
Проверьте, что MaxUsersCur подписан как максимум ключа/файла, а не свободные лицензии.
Ожидаемый результат
Получен подробный read-only отчёт по связанным процессу и лицензиям с защитой необязательных значений.
На что обратить внимание
Серверный процесс может обслуживать другие базы даже на тестовом кластере. Изолированный собственный стенд обязателен.
Лицензия — сведения о полученной лицензии, не способ выгрузить PIN-коды или повторно активировать её.
Нельзя угадывать смысл числовых Running по одному булеву сравнению. Неизвестный код требует сверки документации.
Пример не завершает, не перезапускает процессы, не освобождает лицензии и не регистрирует COM.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.