Проекты

Configuration Http Plugin

Плагин для изменения настроек других плагинов, через браузер, через меню - доступа нет.

В сервисном хосте, изменить настройки — достаточно проблематично, для этого надо либо перезапускать сервис, либо менять настройки в источнике настроек и реализовывать события обратного оповещения после изменения настроек в источнике данных.

Либо, использовать плагин изменения настроек через браузер. Плагин поднимает HTTP сервер на указанном порту и старается через JSON отобразить список плагинов, их настроек и значений настроек.

Самая главная проблема, при развёртывании сервиса и указания одного TCP порта для настроек, что инстансов одного хоста, но с разным массивом плагинов — может быть много, поэтому плагин занимает не только TCP порт сервера, но и поднимает IPC хост. Поэтому, в случае если TCP порт занят, новый инстанс пытается подключиться к существующему IPC хосту и в случае неудачи, вываливается с ошибкой, что порт занят. Если к IPC хосту удалось подключиться успешно, то дочерний плагин сообщает хосту свой ID'шник (в первой версии используется ProcessId) и при обращении через браузер, у администратора появляется возможность выбрать процесс и списко загруженных плагинов.

Далее идёт проблема с закрытием главного хоста, который освобождает порт и закрывает IPC хост. Все процессы подключенные через IPC, начинают пинговать друг друга с определённой периодичностью и в случае закрытия IPC хоста, один из дочерних процессов пытается занять TCP порт и сам открывает IPC хост, к которому снова пытаются подключиться отключённые дочерние процессы.

При успешном запуске хоста, в логах появляются следующие сообщения:

Started at Url:
	http://127.0.0.1:8180/
	net.pipe://serverName/Plugin.ConfigurationHttp-1634336167/Control/Host

В случае с подключением к запущенному IPC хосту, в дочернем процессе появится следующее сообщение:

Started at Url:
	net.pipe://serverName/Plugin.ConfigurationHttp-970326027/Control/17392/Plugins

А в ранее запущенном IPC хосте будет следующее сообщение:

IPC service connected -> ProcessId: 17,392 Address: net.pipe://serverName/Plugin.ConfigurationHttp-970326027/Control/17392/Plugins Count: 4

На Windows 10 так же может потребоваться зарезервировать TCP порт под приложение, используя комманду netsh, так что в случае получения ошибки "Access is denied" при попытки открыть TCP порт, в лог будет записано следующее сообщение:

You have to reserve host with netsh command or run application in [Administrator] mode.

И будет выброшено исключение, которое в данных будет содержать строку вида:

String.Format("netsh http add urlacl url={0} user={1}\\{2}\"", this._hostUrl, Environment.UserDomainName, Environment.UserName);
Screenshot
Screenshot

Настройки

  1. AuthenticationScheme: Anonymous — Авторизация с использованием определённой схемы.
  2. Realm: — ?
  3. UnsafeConnectionNtlmAuthentication: False — ?
  4. Users: — Массив аккаунтов, совместно с доменом используемых для входа при Basic авторизации. Формат: DOMAIN\Login
  5. UnsafeConnectionNtlmAuthentication: False — ?
  6. HostUrl: http://{ipAddress}:8180/ — Хост, по адресу которого открываются настройки приложения. Константа {ipAddress} — Используется для подставления глобального IP адреса машины.
  7. IgnoreWriteExceptions: True — Получать ошибки на сервере, при отправки ответа на клиент
  8. ListenersCount: 1 — Кол-во потоков, которые обрабатывают запросы клиента

Теги:

Скачать

Родительские файлы