---
title: Configuration settings
summary: Configuration keys consumed by this library, retrieval methods, and runtime dependencies.
status: draft
owner: <owner>
last_reviewed: 2026-09-15
library: SAIF.Framework.Core
reference_type: package
---

# Configuration settings

SAIF.Framework.Core is the **environment-service framework provider** for the SAIF platform — it implements `IEnvironmentService` (abstract `EnvironmentServiceBase` plus four concrete subclasses) rather than merely consuming an implementation supplied elsewhere. This page therefore documents both the settings this library's own code consumes (27 distinct Environment API keys, 3 `AppSettings` keys, 2 generic database connections resolved through a legacy proxy) and the provider-side environment-service implementation it supplies for downstream consumers.

## Configuration retrieval methods

| Method | Class / Interface | Namespace | Usage pattern |
| --- | --- | --- | --- |
| `GetConfigSetting(string)` | `IEnvironmentService` (impl. `EnvironmentServiceBase`) | `SAIF.Core.Services` / `SAIF.Services.Common` | Plain-text runtime setting retrieval; resolves from developer-override JSON, in-memory `Configurations` cache, or a fetched section from the Environment API. Used pervasively by consuming classes in this library. |
| `GetConfigSetting<T>(string)` | `IEnvironmentService` (impl. `EnvironmentServiceBase`) | same | Typed variant of the above; converts the resolved `ConfigSetting` via `GetValue<T>()`. No call sites found within this library's own consuming classes.* |
| `GetGlobalConfigSetting(string)` / `GetGlobalConfigSetting<T>(string)` | `IEnvironmentService` (impl. `EnvironmentServiceBase`) | same | Retrieves a setting from the **global** section (as opposed to a per-application section), fetched via `GetGlobalConfigSettings()` (`WebClient.DownloadString` against `{EnvironmentApiUrl}/v2/settings/{ApplicationId}/global`) and cached in `_globalSettings`. Used internally by `EnvironmentServiceBase.MachineSecurity` to resolve AD/LDAP settings. |
| `GetSecureConfigSetting(string, string)` / `GetSecureConfigSetting<T>(string, string)` | `IEnvironmentService` (impl. `EnvironmentServiceBase`) | same | Encrypted/credential setting retrieval; hits `{EnvironmentApiUrl}/v2/secureSetting/{applicationId}/{track}/{section}/{key}/value?systemHashValue=...` via `JsonHttpClient`, result cached in a `SecureSettingCache` keyed by `configKey`. No call sites found within this library's own consuming classes — this library supplies the mechanism for downstream consumers. |
| `LoadSection(string)` | `EnvironmentServiceBase` | `SAIF.Services.Common` | Fetches an entire configuration section from the Environment API (`{EnvironmentApiUrl}/v2/settings/{ApplicationId}/{ApplicationHost}/{section}/section`) and merges results into the in-memory `Configurations` cache. Invoked internally by `GetConfigSettingInfo` when a key is not already cached. |
| `Environment.GetEnvironmentVariable("EnvironmentApiUrl")` | `EnvironmentServiceBase` (field `_environmentApiUrl`) | `System` | OS-level environment variable — the base URL of the Environment API itself, read once at construction. Throws `MissingEnvironmentUrlVariableException` if empty when accessed via the `EnvironmentApiUrl` property. |
| `ConfigurationManager.AppSettings["<key>"]` | `System.Configuration.ConfigurationManager` (framework-standard) | `System.Configuration` | Direct Web.config/App.config `<appSettings>` reads, bypassing `IEnvironmentService` entirely. Used for two bootstrap/override values in `EnvironmentServiceBase` and one SMTP default in `EmailService`. |
| `DbConnectionManager.GetOracleConnectionString(env, string, string)` / `GetSqlServerConnectionString(env, string, string, string)` | `DbConnectionManager` (static) | `SAIF.Services.Common` | Two-level indirection: resolves an instance/server name via `env.GetConfigSetting(<configKey>)`, then calls a legacy `DbConnectionServiceProxy` (ASMX/WCF client, itself built from `env.GetConfigSetting("dbConnectionServiceUrl")`) to obtain the live connection string, cached in-process. |
| `PropertiesFileUtilities.GetValue(string path)` | `PropertiesFileUtilities` (static) | `SAIF.Services.Common` | Legacy XML properties file pattern. Reads `{app-root}\Xml\Properties.xml` (path derived from `HttpContext.Current.Request.ServerVariables["APPL_PHYSICAL_PATH"]`) via `XDocument.Load(...).XPathSelectElement(path)`. Declared as a public static utility with no internal call sites in this library — exists for consuming web applications to use directly.* |

## Environment API settings

Settings retrieved via `IEnvironmentService` (centralized environment configuration service). "Secure" is No for all rows — no call sites for `GetSecureConfigSetting` were found within this library's own consuming code.

| Setting key | Method | Secure | Consuming class | Source |
| --- | --- | --- | --- | --- |
| `dbConnectionServiceUrl` | `GetConfigSetting` | No | `DbConnectionManager` | `Core\SAIF.Core\Services.Common\DbConnectionManager.cs` |
| *(caller-supplied `databaseConfigKey`, e.g. `oracleDatabase`/`oracleCustomDatabase`)* | `GetConfigSetting` (indirect) | No | `DbConnectionManager` | `Core\SAIF.Core\Services.Common\DbConnectionManager.cs` |
| *(caller-supplied `sqlServerConfigKey`, e.g. `netFrameworkSqlServer`)* | `GetConfigSetting` (indirect) | No | `DbConnectionManager` | `Core\SAIF.Core\Services.Common\DbConnectionManager.cs` |
| `documentGeneratorServiceUrl` | `GetConfigSetting` | No | `DocumentService` | `Core\SAIF.Core\Services\Utilities\Documents\DocumentService.cs` |
| `idmFilePath` | `GetConfigSetting` | No | `DocumentService` | `Core\SAIF.Core\Services\Utilities\Documents\DocumentService.cs` |
| `documentGeneratorServiceUrl` | `GetConfigSetting` | No | `PrintService` (same key as `DocumentService`) | `Core\SAIF.Core\Services\Utilities\Documents\PrintService.cs` |
| `fileServiceUrl` | `GetConfigSetting` | No | `FileService` | `Core\SAIF.Core\Services\Utilities\FileService.cs` |
| `faxServiceUrl` | `GetConfigSetting` | No | `FaxService` | `Core\SAIF.Core\Services\Utilities\Documents\FaxService.cs` |
| `securityServiceUrl` | `GetConfigSetting` | No | `SecurityServiceClient` | `Core\SAIF.Core\Services\ClientProxies\SecurityServiceClient.cs` |
| `ad.ldap.host` | `GetConfigSetting` | No | `SecurityServiceClient` | `Core\SAIF.Core\Services\ClientProxies\SecurityServiceClient.cs` |
| `ad.ldap.internal.root` | `GetConfigSetting` | No | `SecurityServiceClient` | `Core\SAIF.Core\Services\ClientProxies\SecurityServiceClient.cs` |
| `ad.internal.domain` | `GetConfigSetting` | No | `SecurityServiceClient` | `Core\SAIF.Core\Services\ClientProxies\SecurityServiceClient.cs` |
| `ad.ldap.host` | `GetGlobalConfigSetting` | No | `EnvironmentServiceBase` (`MachineSecurity` property) | `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs` |
| `ad.ldap.internal.root` | `GetGlobalConfigSetting` | No | `EnvironmentServiceBase` (`MachineSecurity` property) | `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs` |
| `ad.internal.domain` | `GetGlobalConfigSetting` | No | `EnvironmentServiceBase` (`MachineSecurity` property) | `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs` |
| `oracleDatabase` | `GetConfigSetting` | No | `ImagingService` | `Core\SAIF.Core\Services\Utilities\Documents\ImagingService.cs` |
| `legacyPdfServiceUrl` | `GetConfigSetting` | No | `ImagingService` | `Core\SAIF.Core\Services\Utilities\Documents\ImagingService.cs` |
| `imagingServiceUrl` | `GetConfigSetting` | No | `ImagingService` | `Core\SAIF.Core\Services\Utilities\Documents\ImagingService.cs` |
| `towerInfoServiceUrl` / `towerinfoserviceurl` | `GetConfigSetting` | No | `ImagingService` (case-inconsistent literal across call sites; lookup is case-insensitive)* | `Core\SAIF.Core\Services\Utilities\Documents\ImagingService.cs` |
| `preferenceServiceUrl` | `GetConfigSetting` | No | `PreferenceService` | `Core\SAIF.Core\Services\Utilities\PreferenceService.cs` |
| `pdfdatadirectory` | `GetConfigSetting` | No | `PdfConvertAndMergeService` | `Core\SAIF.Core\Services\Utilities\Documents\PdfConvertAndMergeService.cs` |
| `SecurityClient.ServiceUrl` | `GetConfigSetting` | No | `SecurityApiClient` | `Core\SAIF.Core\Services\Utilities\SecurityApiClient.cs` |
| `SecurityClient.resourcesuffix` | `GetConfigSetting` | No | `SecurityApiClient` | `Core\SAIF.Core\Services\Utilities\SecurityApiClient.cs` |
| `pdfServiceUrl` (via `EnvironmentConfigKeys.PdfServiceUrl`) | `GetConfigSetting` | No | `PDFService` | `Core\SAIF.Core\Services\Utilities\Documents\PDFService.cs` |
| `uc4coreapi.url` | `GetConfigSetting` | No | `UC4Service` | `Core\SAIF.Core\Services\Utilities\UC4Service.cs` |
| `workCalendarServiceUrl` (constant `UrlConfigKey`) | `GetConfigSetting` | No | `WorkCalendarService` | `Core\SAIF.Core\Services\Utilities\WorkCalendarService.cs` |
| `tracingdefaults.loggingapiurl` | `GetConfigSetting` | No | `LogService` | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `tracingdefaults.logerrorroute` | `GetConfigSetting` | No | `LogService.LogException` | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `{applicationId}.LogThreshold` (dynamically constructed) | `GetConfigSetting` | No | `LogService` | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `tracingDefaults.LogThreshold` | `GetConfigSetting` | No | `LogService` (fallback threshold) | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `tracingDefaults.LogPatternLayout` | `GetConfigSetting` | No | `LogService` | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `tracingdefaults.LoggingApiUrl` | `GetConfigSetting` | No | `LogService` (log4net `RestAppender.RootUrl`) | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `tracingdefaults.logroute` | `GetConfigSetting` | No | `LogService` (log4net `RestAppender.LogRoute`) | `Core\SAIF.Core\Services\Utilities\LogService.cs` |
| `internalAddressRoots` | `GetConfigSetting` | No | `WebEnvironmentService` (`InternalAddressRoots`, used by `IsClientExternal`) | `Core\SAIF.Core\Services.Common\WebEnvironmentService.cs` |
| `insideFirewallAddressRoots` | `GetConfigSetting` | No | `WebEnvironmentService` (`InsideFirewallAddressRoots`, used by `IsClientInsideFirewall`) | `Core\SAIF.Core\Services.Common\WebEnvironmentService.cs` |

27 distinct Environment API setting keys are directly consumed by this library's own code (the count above, excluding declared-but-unused constants).

### Declared-but-not-locally-consumed `EnvironmentConfigKeys` constants

`EnvironmentConfigKeys.cs` declares 10 additional constants with no `GetConfigSetting(EnvironmentConfigKeys.X)` call site found within this library — retained as reusable constants for downstream consumers:

| Declared constant | Key value |
| --- | --- |
| `OracleCustomDatabase` | `oracleCustomDatabase` |
| `NetFrameworkSqlServer` | `netFrameworkSqlServer` |
| `FaxSoapServiceUrl` | `faxSoapServiceUrl` |
| `FaxTempStorageFolder` | `faxTempStorageFolder` |
| `ImagingApiUrl` | `ImagingApiUrl` |
| `PdfApiUrl` | `PdfApi.Url` |
| `ClaimInfoApiUrl` | `ClaimInfoApiUrl` |
| `ActivePdfServer` | `activePdfServer` |
| `K2FormsUrl` | `k2formsurl` |
| `WebContextServiceUrl` | `webContextServiceUrl` |

## AppSettings (Web.config)

Settings retrieved via `ConfigurationManager.AppSettings` (bypassing `IEnvironmentService`).

| Setting key | Default value | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- |
| `ApplicationHost` | `np13` (declared in `app.config`) | Fallback/override host resolution honored only on developer machines | `EnvironmentServiceBase.GetHostFromAppConfig()` — consumed by `WindowsEnvironmentService`, `WcfEnvironmentService`, `WebEnvironmentService` | `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs`; declared in `Core\SAIF.Core\app.config` |
| `EnvApiDeveloperSettingsOverride` | `developerSettings.json` (declared in `app.config` under a mismatched key name — see risks) | Resolves a developer local-override JSON file name, only honored when `IsDeveloperMachine` | `EnvironmentServiceBase.DeveloperSettingsFile` | `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs`; declared in `Core\SAIF.Core\app.config` |
| `SMTP_SERVER` | `mail.saif.com` (code-level `??` fallback; not declared in `app.config`) | SMTP relay host for outbound mail | `EmailService` (constructor, `SMTPServer` field) | `Core\SAIF.Core\Services\Utilities\EmailService.cs` |

`app.config` `<appSettings>` declares exactly two keys:
```xml
<add key="ApplicationHost" value="np13" />
<add key="DeveloperSettingsFile" value="developerSettings.json" />
```

## Database connection configuration

No direct `SqlConnection`/`OracleConnection` construction exists in this library. Both database "connections" are resolved indirectly through a legacy connection-info service (`DbConnectionServiceProxy`) fronted by `DbConnectionManager` — 2 generic, parameterized connections in total.

| Connection name | Provider | Retrieval method | Purpose | Source |
| --- | --- | --- | --- | --- |
| Oracle instance connection (generic, parameterized) | Oracle | `DbConnectionManager.GetOracleConnectionString(env, databaseConfigKey, userName)` → `DbConnectionServiceProxy.GetOracleConnectionString(instance, userName)` (ASMX/WCF call to legacy `ConnectInfoSoap` endpoint, `http://saifonline/WebServices/wsDBConnections/ConnectInfo.asmx` per `app.config`) | Resolves an Oracle connection string on demand from a caller-supplied instance-name indirection (e.g. `oracleDatabase`/`oracleCustomDatabase`); result cached in-process keyed by `instance+userName` | `Core\SAIF.Core\Services.Common\DbConnectionManager.cs` |
| SQL Server instance connection (generic, parameterized) | SQL Server | `DbConnectionManager.GetSqlServerConnectionString(env, sqlServerConfigKey, databaseName, userName)` → `DbConnectionServiceProxy.GetSqlServerConnectionString(server, instance, userName)` (same legacy ASMX/WCF `ConnectInfoSoap` endpoint) | Resolves a SQL Server connection string on demand from a caller-supplied server-name indirection (e.g. `netFrameworkSqlServer`); cached in-process keyed by `server+instance+userName` | `Core\SAIF.Core\Services.Common\DbConnectionManager.cs` |

No `<connectionStrings>` section is present in `app.config` — this project does not declare any static ADO.NET connection strings; all resolution is dynamic/service-based via the legacy proxy above.

## Secure settings

No `GetSecureConfigSetting` call sites were found within this library's own consuming classes — only the interface declaration (`IEnvironmentService`) and its implementation (`EnvironmentServiceBase.GetSecureConfigSetting`/`GetSecureConfigSetting<T>`) exist here. This library supplies the secure-retrieval *mechanism* for downstream consumers rather than consuming it itself.

| Setting key | Encryption method | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- |
| *(none — mechanism only)* | `SystemHashUtil.ComputeHash(SystemType, string)` companion hash, via `EnvironmentServiceBase.GetSecureConfigSetting(configKey, systemHashValue)` | Encrypted/credential setting retrieval for downstream consumers, cached in `SecureSettingCache` | `EnvironmentServiceBase` (provider only) | `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs`, `Core\SAIF.Core\Services.Common\SystemHashUtil.cs` |

## Transitive configuration (from dependencies)

Per `.csproj` inspection, `SAIF.Framework.Core` has no `<ProjectReference>` elements, so there is no same-repo transitive configuration to catalog.

| Setting key | Method | Source dependency | Dependency type | Purpose |
| --- | --- | --- | --- | --- |
| *(none confirmed)* | — | `SAIF.HashUtil` | NuGet | Confirmed via Legends CLI to have no identified `IEnvironmentService` keys or configuration settings of its own. |
| *(unresolved)* | — | `SAIF.Web.API.Clients` | NuGet | Legends CLI query (`--doc-type configuration`) returned no grounded documentation content — recorded as unknown rather than confirmed absent.** |

## Configuration dependencies

| Dependency | Type | Required at | Impact if missing |
| --- | --- | --- | --- |
| `EnvironmentApiUrl` OS environment variable | OS environment variable | Startup/construction of any `EnvironmentServiceBase` subclass | `MissingEnvironmentUrlVariableException` thrown on every operation that needs the Environment API (`GetConfigSetting`, `LoadSection`, `GetGlobalConfigSettings`, `GetSecureConfigSetting`) — a hard runtime dependency for every application built on this framework |
| `dbConnectionServiceUrl` + caller-supplied instance/server config key | Environment API setting + WCF/ASMX proxy | Runtime, on first database connection-string resolution | `DbConnectionManager` calls fail with a generic `ApplicationException` from `GetConfigSettingInfo` if the config key is missing or misspelled, rather than a clearly database-specific error* |
| `app.config` `DeveloperSettingsFile` / code-read `EnvApiDeveloperSettingsOverride` name mismatch | Configuration key naming | Developer-machine local override resolution | The `app.config`-declared `DeveloperSettingsFile` key is never actually read; the differently-named `EnvApiDeveloperSettingsOverride` key must be separately supplied by a consuming application's own config, or developer overrides silently fall through to no-override behavior |
| `SMTP_SERVER` | AppSettings (optional) | `EmailService` construction | Falls back to the hardcoded `mail.saif.com` relay if not supplied by a hosting application — may send real mail from a non-prod system if that relay happens to be live* |

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Security and authorization](security-authorization.md)
- [API reference](api/index.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with `**` could not be confirmed; treat as unknown until verified.

## Sources
- `Core\SAIF.Core\Core\Services\IEnvironmentService.cs`
- `Core\SAIF.Core\Services.Common\EnvironmentServiceBase.cs`
- `Core\SAIF.Core\Services.Common\WebEnvironmentService.cs`
- `Core\SAIF.Core\Services.Common\WindowsEnvironmentService.cs`
- `Core\SAIF.Core\Services.Common\WcfEnvironmentService.cs`
- `Core\SAIF.Core\Services.Common\CustomEnvironmentService.cs`
- `Core\SAIF.Core\Services.Common\IWebEnvironmentService.cs`
- `Core\SAIF.Core\Services.Common\EnvironmentConfigKeys.cs`
- `Core\SAIF.Core\Services.Common\EnvironmentHost.cs`
- `Core\SAIF.Core\Services.Common\SecureSettingCache.cs`
- `Core\SAIF.Core\Services.Common\SystemHashUtil.cs`
- `Core\SAIF.Core\Services.Common\PropertiesFileUtilities.cs`
- `Core\SAIF.Core\Services.Common\DbConnectionManager.cs`
- `Core\SAIF.Core\Services\ClientProxies\Legacy\DbConnectionServiceProxy.cs`
- `Core\SAIF.Core\Services\ClientProxies\SecurityServiceClient.cs`
- `Core\SAIF.Core\Services\Utilities\SecurityApiClient.cs`
- `Core\SAIF.Core\Services\Utilities\EmailService.cs`
- `Core\SAIF.Core\Services\Utilities\FileService.cs`
- `Core\SAIF.Core\Services\Utilities\LogService.cs`
- `Core\SAIF.Core\Services\Utilities\PreferenceService.cs`
- `Core\SAIF.Core\Services\Utilities\UC4Service.cs`
- `Core\SAIF.Core\Services\Utilities\WorkCalendarService.cs`
- `Core\SAIF.Core\Services\Utilities\Documents\DocumentService.cs`
- `Core\SAIF.Core\Services\Utilities\Documents\PrintService.cs`
- `Core\SAIF.Core\Services\Utilities\Documents\FaxService.cs`
- `Core\SAIF.Core\Services\Utilities\Documents\ImagingService.cs`
- `Core\SAIF.Core\Services\Utilities\Documents\PDFService.cs`
- `Core\SAIF.Core\Services\Utilities\Documents\PdfConvertAndMergeService.cs`
- `Core\SAIF.Core\Services\ServiceRegistrations.cs`
- `Core\SAIF.Core\app.config`
- `Core\SAIF.Core\SAIF.Framework.Core.csproj`
