Component: Configuration
Purpose
Defines the appsettings.json structure, configuration binding, and startup validation for the LmxProxy Host service.
Location
src/ZB.MOM.WW.LmxProxy.Host/Configuration/LmxProxyConfiguration.cs — root configuration class.
src/ZB.MOM.WW.LmxProxy.Host/Configuration/ConfigurationValidator.cs — validation logic.
src/ZB.MOM.WW.LmxProxy.Host/appsettings.json — default configuration file.
Responsibilities
- Define all configurable settings as strongly-typed classes.
- Bind
appsettings.json sections to configuration objects via Microsoft.Extensions.Configuration.
- Validate all settings at startup, failing fast on invalid values.
- Support environment variable overrides.
1. Configuration Structure
1.1 Root: LmxProxyConfiguration
| Setting |
Type |
Default |
Description |
| GrpcPort |
int |
50051 |
gRPC server listen port |
| ApiKeyConfigFile |
string |
apikeys.json |
Path to API key configuration file |
| Subscription |
SubscriptionConfiguration |
— |
Subscription channel settings |
| ServiceRecovery |
ServiceRecoveryConfiguration |
— |
Windows SCM recovery settings |
| Connection |
ConnectionConfiguration |
— |
MxAccess connection settings |
| Tls |
TlsConfiguration |
— |
TLS/SSL settings |
| WebServer |
WebServerConfiguration |
— |
Status web server settings |
1.2 ConnectionConfiguration
| Setting |
Type |
Default |
Description |
| MonitorIntervalSeconds |
int |
5 |
Auto-reconnect check interval |
| ConnectionTimeoutSeconds |
int |
30 |
Initial connection timeout |
| ReadTimeoutSeconds |
int |
5 |
Per-read operation timeout |
| WriteTimeoutSeconds |
int |
5 |
Per-write operation timeout |
| MaxConcurrentOperations |
int |
10 |
Semaphore limit for concurrent MxAccess operations |
| AutoReconnect |
bool |
true |
Enable auto-reconnect loop |
| NodeName |
string? |
null |
MxAccess node name (optional) |
| GalaxyName |
string? |
null |
MxAccess galaxy name (optional) |
1.3 SubscriptionConfiguration
| Setting |
Type |
Default |
Description |
| ChannelCapacity |
int |
1000 |
Per-client subscription buffer size |
| ChannelFullMode |
string |
DropOldest |
Backpressure strategy: DropOldest, DropNewest, Wait |
1.4 TlsConfiguration
| Setting |
Type |
Default |
Description |
| Enabled |
bool |
false |
Enable TLS on gRPC server |
| ServerCertificatePath |
string |
certs/server.crt |
PEM server certificate |
| ServerKeyPath |
string |
certs/server.key |
PEM server private key |
| ClientCaCertificatePath |
string |
certs/ca.crt |
CA certificate for mTLS |
| RequireClientCertificate |
bool |
false |
Require client certificates |
| CheckCertificateRevocation |
bool |
false |
Enable CRL checking |
1.5 WebServerConfiguration
| Setting |
Type |
Default |
Description |
| Enabled |
bool |
true |
Enable status web server |
| Port |
int |
8080 |
HTTP listen port |
| Prefix |
string? |
null |
Custom URL prefix (defaults to http://+:{Port}/) |
1.6 ServiceRecoveryConfiguration
| Setting |
Type |
Default |
Description |
| FirstFailureDelayMinutes |
int |
1 |
Restart delay after first failure |
| SecondFailureDelayMinutes |
int |
5 |
Restart delay after second failure |
| SubsequentFailureDelayMinutes |
int |
10 |
Restart delay after subsequent failures |
| ResetPeriodDays |
int |
1 |
Days before failure count resets |
2. Validation
ConfigurationValidator.ValidateAndLog() runs at startup and checks:
- GrpcPort: Must be 1–65535.
- Connection: All timeout values > 0. NodeName and GalaxyName ≤ 255 characters.
- Subscription: ChannelCapacity 0–100000. ChannelFullMode must be one of
DropOldest, DropNewest, Wait.
- ServiceRecovery: All failure delay values ≥ 0. ResetPeriodDays > 0.
- TLS: If enabled, validates certificate file paths exist.
Validation errors are logged and cause the service to throw InvalidOperationException, preventing startup.
3. Configuration Sources
Configuration is loaded via Microsoft.Extensions.Configuration.ConfigurationBuilder:
appsettings.json (required).
- Environment variables (override any JSON setting).
4. Serilog Configuration
Logging is configured in the Serilog section of appsettings.json:
| Setting |
Value |
| Console sink |
ANSI theme, custom template with HH:mm:ss timestamp |
| File sink |
logs/lmxproxy-.txt, daily rolling, 30 files retained |
| Default level |
Information |
| Override: Microsoft |
Warning |
| Override: System |
Warning |
| Override: Grpc |
Information |
| Enrichment |
FromLogContext, WithMachineName, WithThreadId |
Dependencies
- Microsoft.Extensions.Configuration — configuration binding.
- Serilog.Settings.Configuration — Serilog configuration from appsettings.
Interactions
- ServiceHost (Program.cs) loads and validates configuration at startup.
- All other components receive their settings from the bound configuration objects.