public override void Reload()
        {
            Service.Refresh();

            AppConfig = CreateAppConfig();
            HostName  = AppConfig.Read(ServiceControlSettings.HostName, "localhost");
            Port      = AppConfig.Read(ServiceControlSettings.Port, 33333);
            DatabaseMaintenancePort = AppConfig.Read <int?>(ServiceControlSettings.DatabaseMaintenancePort, null);
            VirtualDirectory        = AppConfig.Read(ServiceControlSettings.VirtualDirectory, (string)null);
            LogPath           = AppConfig.Read(ServiceControlSettings.LogPath, DefaultLogPath());
            DBPath            = AppConfig.Read(ServiceControlSettings.DBPath, DefaultDBPath());
            AuditQueue        = AppConfig.Read(ServiceControlSettings.AuditQueue, (string)null);
            InMaintenanceMode = AppConfig.Read(ServiceControlSettings.MaintenanceMode, false);
            ErrorQueue        = AppConfig.Read(ServiceControlSettings.ErrorQueue, "error");
            TransportPackage  = DetermineTransportPackage();
            ConnectionString  = ReadConnectionString();
            Description       = GetDescription();
            ServiceAccount    = Service.Account;

            ForwardErrorMessages = AppConfig.Read(ServiceControlSettings.ForwardErrorMessages, false);
            if (ForwardErrorMessages)
            {
                ErrorLogQueue = AppConfig.Read(ServiceControlSettings.ErrorLogQueue, $"{ErrorQueue}.log");
            }

            ForwardAuditMessages = AppConfig.Read(ServiceControlSettings.ForwardAuditMessages, false);
            if (ForwardAuditMessages)
            {
                AuditLogQueue = AppConfig.Read(ServiceControlSettings.AuditLogQueue, string.IsNullOrEmpty(AuditQueue) ? null : $"{AuditQueue}.log");
            }

            if (TimeSpan.TryParse(AppConfig.Read(ServiceControlSettings.ErrorRetentionPeriod, (string)null), out var errorRetentionPeriod))
            {
                ErrorRetentionPeriod = errorRetentionPeriod;
            }

            if (TimeSpan.TryParse(AppConfig.Read(ServiceControlSettings.AuditRetentionPeriod, (string)null), out var auditRetentionPeriod))
            {
                AuditRetentionPeriod = auditRetentionPeriod;
            }

            var remoteInstancesString = AppConfig.Read(ServiceControlSettings.RemoteInstances, default(string));

            if (!string.IsNullOrWhiteSpace(remoteInstancesString))
            {
                RemoteInstances = RemoteInstanceConverter.FromJson(remoteInstancesString);
            }
        }
        protected override void ApplySettingsChanges(KeyValueConfigurationCollection settings)
        {
            if (!ForwardErrorMessages)
            {
                ErrorLogQueue = null;
            }

            if (!ForwardAuditMessages)
            {
                AuditLogQueue = null;
            }

            settings.Set(ServiceControlSettings.HostName, HostName);
            settings.Set(ServiceControlSettings.Port, Port.ToString());
            settings.Set(ServiceControlSettings.DatabaseMaintenancePort, DatabaseMaintenancePort.ToString(), Version);
            settings.Set(ServiceControlSettings.LogPath, LogPath);
            settings.Set(ServiceControlSettings.ForwardAuditMessages, ForwardAuditMessages.ToString(), Version);
            settings.Set(ServiceControlSettings.ForwardErrorMessages, ForwardErrorMessages.ToString(), Version);
            settings.Set(ServiceControlSettings.AuditRetentionPeriod, AuditRetentionPeriod.ToString(), Version);
            settings.Set(ServiceControlSettings.ErrorRetentionPeriod, ErrorRetentionPeriod.ToString(), Version);
            settings.RemoveIfRetired(ServiceControlSettings.HoursToKeepMessagesBeforeExpiring, Version);
            settings.Set(ServiceControlSettings.AuditQueue, AuditQueue, Version);
            settings.Set(ServiceControlSettings.ErrorQueue, ErrorQueue);
            settings.Set(ServiceControlSettings.AuditLogQueue, AuditLogQueue, Version);
            settings.Set(ServiceControlSettings.ErrorLogQueue, ErrorLogQueue, Version);

            if (RemoteInstances != null)
            {
                if (Compatibility.RemoteInstancesDoNotNeedQueueAddress.SupportedFrom <= Version)
                {
                    foreach (var instance in RemoteInstances)
                    {
                        instance.QueueAddress = null;
                    }
                }

                settings.Set(ServiceControlSettings.RemoteInstances, RemoteInstanceConverter.ToJson(RemoteInstances), Version);
            }
        }