Тип: Число. Верхняя граница диапазона IP-портов - целое число в интервале от 0 до 65535.
Полное описание, параметры и ограничения
АдминистрированиеДиапазонПортов.ВерхняяГраница (AdministrationPortRange.UpperBound)
АдминистрированиеДиапазонПортов (AdministrationPortRange)
ВерхняяГраница (UpperBound)
Доступен, начиная с версии 8.3.14.
Использование:
Чтение и запись.
Описание:
Тип: Число.
Верхняя граница диапазона IP-портов - целое число в интервале от 0 до 65535.
Доступность:
Тонкий клиент, сервер, толстый клиент, интеграция.
Использование в версии:
Доступен, начиная с версии 8.3.14.
Методическая информация
Практические примеры
Инвентаризировать рабочие серверы, порты и расписания
Из выбранного кластера получаем настоящие описания рабочих серверов и вложенные диапазоны портов. Разделяем имена, SPN, ёмкость процесса, центральную роль и расписание.
Где и как запускать
Полный модуль собственной управляемой формы учебной обработки. Читает только явно выбранный УчебныйКластер85 через свой loopback ras, если вы сами запускаете его на стенде.
Подготовка
Нужен отдельный собственный серверный стенд 1С 8.5.1.1343 без рабочих баз. Администратор должен заранее установить сервер, запустить совместимый ras и создать кластер с точным именем УчебныйКластер85. Код ничего не устанавливает и не регистрирует.
Запускайте обработку в собственной пустой учебной конфигурации с именем метаданных УчебнаяКонфигурацияСинтаксиса. Серверное выполнение должно находиться на той же машине, что собственный ras: код разрешает только 127.0.0.1. Это адрес сервера выполнения, не обязательно компьютера тонкого клиента.
Создайте учебную обработку с управляемой формой. Добавьте реквизиты формы: ПортRAS — Число без дробной части; ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, JSONРезультат — Строка. У JSONРезультат длина 0, то есть неограниченная. ИмяАдминистратораКластера — логин, а не имя кластера.
Выведите поля на форму. Для элементов ПарольАгента и ПарольАдминистратораКластера включите Режим пароля; не сохраняйте их значения в настройках и истории. Для JSONРезультат используйте многострочное поле строки только для просмотра. Маскировка ввода не шифрует пароль и не заменяет защищённый стенд.
Создайте команду ПолучитьУчебныйСнимок, назначьте ей клиентский обработчик с таким же именем и вставьте весь приведённый модуль формы. Другие процедуры команд, общий модуль или готовые неизвестные объекты не нужны.
ПортRAS возьмите из фактического запуска своего ras, не из порта ragent или рабочего процесса. Например, 1545 подходит только если именно этот порт настроен на вашем стенде. Используйте законные учётные данные своего агента и своего кластера; пустые допустимы только для намеренно настроенного учебного стенда без соответствующих администраторов.
В первый раз оставьте ИдентификаторКластера пустым: появится JSON только с кластерами УчебныйКластер85. Скопируйте настоящий UUID из результата, вновь введите очищенные пароли и повторите команду. Кластер выбирается одновременно по UUID и точному учебному имени; чужой кластер не принимается.
Выполняйте каждый урок отдельно. JSON формируется в памяти и показывается только на своей форме; код не сохраняет файлы, не пишет настройки кластера, не прерывает сеансы и не запускает команды ОС. Он выполняет сетевое обращение к своему локальному ras только если вы сами запустите его на подготовленном стенде.
Здесь подключение к ras и запуск в 1С не выполнялись. Проверены тексты, сигнатуры и привязки к локальной справке 8.5.1.1343. Пройдите контрольные действия сами только на своём учебном стенде.
&НаКлиенте
Процедура ПолучитьУчебныйСнимок(Команда)
Попытка
JSONРезультат = УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
Исключение
JSONРезультат = "Снимок не получен. Проверьте собственный стенд, порт, UUID, учебное имя и права. Подробную серверную ошибку исследуйте в отладчике без публикации учётных данных.";
КонецПопытки;
ПарольАгента = "";
ПарольАдминистратораКластера = "";
КонецПроцедуры
&НаСервереБезКонтекста
Функция УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера)
Если ТипЗнч(ПортRAS) <> Тип("Число") Тогда
ВызватьИсключение "Порт ras должен быть числом";
КонецЕсли;
Если ПортRAS <> Цел(ПортRAS) Или ПортRAS < 1 Или ПортRAS > 65535 Тогда
ВызватьИсключение "Недопустимый порт собственного ras";
КонецЕсли;
ТекстовыеПараметры = Новый Массив;
ТекстовыеПараметры.Добавить(ИмяАгента);
ТекстовыеПараметры.Добавить(ПарольАгента);
ТекстовыеПараметры.Добавить(ИдентификаторКластера);
ТекстовыеПараметры.Добавить(ИмяАдминистратораКластера);
ТекстовыеПараметры.Добавить(ПарольАдминистратораКластера);
Для Каждого ТекстовыйПараметр Из ТекстовыеПараметры Цикл
Если ТипЗнч(ТекстовыйПараметр) <> Тип("Строка") Тогда
ВызватьИсключение "Учётные данные и UUID должны быть строками";
КонецЕсли;
КонецЦикла;
Агент = Новый АдминистрированиеСервера("127.0.0.1", ПортRAS);
Агент.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
Кластеры = Агент.ПолучитьКластеры();
Если ПустаяСтрока(СокрЛП(ИдентификаторКластера)) Тогда
Каталог = Новый Массив;
Для Каждого Найденный Из Кластеры Цикл
Если Найденный.Имя = "УчебныйКластер85" Тогда
СтрокаКаталога = Новый Структура;
СтрокаКаталога.Вставить("UUID", Строка(Найденный.ИдентификаторКластера));
СтрокаКаталога.Вставить("Имя", Найденный.Имя);
Каталог.Добавить(СтрокаКаталога);
КонецЕсли;
КонецЦикла;
Возврат СериализоватьСвойСнимок(Новый Структура("УчебныеКластеры", Каталог));
КонецЕсли;
Кластер = Неопределено;
Совпадений = 0;
Для Каждого Найденный Из Кластеры Цикл
Если НРег(Строка(Найденный.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера))
И Найденный.Имя = "УчебныйКластер85" Тогда
Кластер = Найденный;
Совпадений = Совпадений + 1;
КонецЕсли;
КонецЦикла;
Если Совпадений <> 1 Тогда
ВызватьИсключение "Нужен один собственный учебный кластер с подтверждённым UUID";
КонецЕсли;
Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
Снимок = Новый Структура;
Снимок.Вставить("UUIDКластера", Строка(Кластер.ИдентификаторКластера));
Снимок.Вставить("ИмяКластера", Кластер.Имя);
Серверы = Новый Массив;
Для Каждого Рабочий Из Кластер.ПолучитьРабочиеСерверы() Цикл
СтрокаСервера = Новый Структура;
СтрокаСервера.Вставить("UUID", Строка(Рабочий.ИдентификаторРабочегоСервера));
СтрокаСервера.Вставить("Имя", Рабочий.Имя);
СтрокаСервера.Вставить("ИмяКомпьютера", Рабочий.ИмяКомпьютера);
СтрокаСервера.Вставить("ИмяСлужбыСервера", Рабочий.ИмяСлужбыСервера);
СтрокаСервера.Вставить("КаталогМоделейРаспознаванияРечи", Рабочий.КаталогМоделейРаспознаванияРечи);
СтрокаСервера.Вставить("КоличествоИнформационныхБазНаПроцесс", Рабочий.КоличествоИнформационныхБазНаПроцесс);
СтрокаСервера.Вставить("КоличествоСоединенийНаПроцесс", Рабочий.КоличествоСоединенийНаПроцесс);
СтрокаСервера.Вставить("Порт", Рабочий.Порт);
СтрокаСервера.Вставить("ПортГлавногоМенеджера", Рабочий.ПортГлавногоМенеджера);
СтрокаСервера.Вставить("РасписаниеПерезапуска", Рабочий.РасписаниеПерезапуска);
СтрокаСервера.Вставить("СоздаватьМенеджерПодКаждыйСервис", Рабочий.СоздаватьМенеджерПодКаждыйСервис);
СтрокаСервера.Вставить("ЦентральныйСервер", Рабочий.ЦентральныйСервер);
Диапазоны = Новый Массив;
Для Каждого Диапазон Из Рабочий.ДиапазоныПортов Цикл
СтрокаДиапазона = Новый Структура;
СтрокаДиапазона.Вставить("НижняяГраница", Диапазон.НижняяГраница);
СтрокаДиапазона.Вставить("ВерхняяГраница", Диапазон.ВерхняяГраница);
СтрокаДиапазона.Вставить("ГраницыВПорядке", Диапазон.НижняяГраница <= Диапазон.ВерхняяГраница);
Диапазоны.Добавить(СтрокаДиапазона);
КонецЦикла;
СтрокаСервера.Вставить("ДиапазоныПортов", Диапазоны);
СтрокаСервера.Вставить("РасписаниеСервераНепустое", Не ПустаяСтрока(Рабочий.РасписаниеПерезапуска));
Серверы.Добавить(СтрокаСервера);
КонецЦикла;
Снимок.Вставить("РабочиеСерверы", Серверы);
Возврат СериализоватьСвойСнимок(Снимок);
КонецФункции
&НаСервереБезКонтекста
Функция СериализоватьСвойСнимок(Снимок)
Писатель = Новый ЗаписьJSON;
Писатель.УстановитьСтроку();
ЗаписатьJSON(Писатель, Снимок);
Возврат Писатель.Закрыть();
КонецФункции
Разбор по шагам
Проверка имени учебной конфигурации и числового порта выполняется до создания соединения. Удалённый адрес не принимается: 127.0.0.1 записан в серверном коде.
У агента порядок аутентификации — пароль, имя; у кластера — имя, пароль. Два вызова имеют разные контракты и не взаимозаменяемы.
Пустой UUID запускает только каталог собственных учебных кластеров. Повторный запуск выбирает один кластер по реальному UUID и точному имени, не первый элемент массива.
В JSON попадают только явно перечисленные диагностические поля. Объект администрирования целиком не сериализуется; пароли и сырая ошибка аутентификации не выводятся.
После любого исхода клиент очищает два поля пароля. Для следующего запуска их нужно вводить заново; остальные параметры и результат остаются на своей форме.
ПолучитьРабочиеСерверы создаёт снимок зарегистрированных серверов, а не список процессов операционной системы.
У каждого сохраняем UUID, имя компьютера, порт и ПортГлавногоМенеджера. Эти порты отличаются от адреса ras, через который мы получили сведения.
ДиапазоныПортов — readonly-массив реальных АдминистрированиеДиапазонПортов. Читаем обе границы и проверяем порядок; не добавляем порты и не сканируем сеть.
ИмяСлужбыСервера — SPN для аутентификации Kerberos, не отображаемое имя службы Windows. КаталогМоделейРаспознаванияРечи — путь на сервере; его наличие на диске не проверяется.
Количество баз и соединений на процесс — настройки назначения новых соединений, не текущие счётчики. Непустое расписание рабочего сервера имеет приоритет над расписанием кластера.
Как проверить результат
РабочиеСерверы содержит реальные строки своего стенда. UUID и порты сопоставьте с собственной консолью.
У каждого диапазона ГраницыВПорядке показывает результат сравнения нижней и верхней границ. Это не проверка доступности или занятости портов.
Пустой SPN, путь моделей или расписание сами по себе не считаются ошибкой; интерпретируйте их согласно назначению своего стенда.
Ожидаемый результат
Создана собственная инвентаризация узлов кластера с реальными вложенными диапазонами и объяснением их назначения.
На что обратить внимание
Имя и loopback-адрес — защитные условия учебного сценария, не замена правам администратора и сетевой защите. Не переименовывайте рабочий кластер ради обхода проверки.
Свойства настроек могут быть записываемыми, но этот урок их только читает. Нет Записать, Удалить, Прервать или Отключить и нет автоматического исправления конфигурации.
Снимок меняется со временем. Пустая коллекция и нулевое показание имеют разные причины; проверяйте подготовку, включённые метрики и интервалы наблюдения.
Расширенная серверная ошибка может содержать чувствительные сведения. Клиент показывает нейтральную причину; диагностируйте свой стенд в отладчике, не публикуя учётные данные.
Платформа и ras должны соответствовать установленной версии. Чтение свойства не доказывает, что этот параметр используется текущей версией сервера.
ЦентральныйСервер, СоздаватьМенеджерПодКаждыйСервис и ПортГлавногоМенеджера — разные свойства; один флаг не заменяет остальные.
Проверка порядка границ не обнаруживает пересечения диапазонов разных серверов, правила firewall или уже занятые порты.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.