Configurations - advanced

Basic configurations are done via the administration console. However, there are more options to change the configurations. DMS consists of three server components: coreserver (also called DMS), identityserver and notificationserver.

General settings for all components are specified in the appsettings.json, located in the server folder of the installation folder.

Specific settings are specified in component-specific appsettings.json files. An example is the logfile below. Note that when settings exist double (i.e. in the generic appsettings.json as well as in the component-specific versions), the generic appsettings.json are leading.

Example for a specific appsettings.json file (i.e. the DMS or coreserver):

{
"Serilog": {
"WriteTo": [
{
"Name": "Console",
"Args": { "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Literate, Serilog.Sinks.Console" }
},
{
"Name": "File",
"Args": {
"path": "c:\\logs\\dmslog-.log",
"rollingInterval": "Day",
"rollOnFileSizeLimit": true,
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] (User={Username} RequestId={RequestId} ClientSessionId={ClientSessionId}) ({SourceContext}) {Message}{NewLine}{Exception}",
"fileSizeLimitBytes": 1000000000
}
},
{
"Name": "EventLog",
"Args": {
"source": "DMSCore",
"logName": "DMSCore"
}}]}}

In the table below there is an overview of the setting keys, their default values, and a short explanation of the setting key. These keys are available for each server (coreserver, identityserver and notificationserver).

Setting key: (default) value Explanation
path:c:\\logs\\dmslog-.log Path to log file.
rollingInterval:Day Every day a new file is created.
rollOnFileSizeLimit:true Also when size limit is reached a new file will be created.
fileSizeLimitBytes:1000000000 Size limit for creating a new file on the same day.

Below is an example of the current, generic appsettings.json file (valid for all server components). It is not recommended to copy sections from the generic appsettings.json file to the component-specific files. Editing configurations is normally only done in the generic appsettings.json.

{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"MinimumLevel": {
"Default": "Warning",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Destructure": [
{
"Name": "ToMaximumDepth",
"Args": { "maximumDestructuringDepth": 4 }
},
{
"Name": "ToMaximumStringLength",
"Args": { "maximumStringLength": 100 }
},
{
"Name": "ToMaximumCollectionCount",
"Args": { "maximumCollectionCount": 150 }
}
]
},
"Diagnostics": {
"LogRequestsLongerThan": 5000
},
"ElasticApm": {
"Enabled": false,
"ServiceName": "DMS Core server",
"ServiceVersion": "2026.1",
"CentralConfig": true,
"ServerUrls": "",
"LogLevel": "Information"
},
"Storage": {
"AssemblyName": "",
"ClassName": "",
"DatabaseOptions": {
"DataSource": "mongodb://localhost:27017/DMS",
"DataSourceUserName": "",
"DataSourcePassword": "",
"AuthenticationMethod": 0,
"UseSSL": false,
"UseSSLSelfSigned": false,
"UseDpApi": false
},
"Caching": {
"Enabled": false,
"MemorySizeBytes": 2147483648,
"ExpirationTimeInMin": 120
}
},
"IdentityServer": {
"InstanceName": "JewelDMSIdentity",
"InstanceDisplayName": "JewelDMSIdentity",
"Urls": [ "http://localhost:5500" ],
"Authority": "http://localhost:5500",
"PublicAuthority": "http://localhost:5500",
"Signing": {
"CertificateFilePath": ".\\identityserver.pfx",
"CertificatePassword": ""
},
"DatabaseOptions": {
"DataSource": "mongodb://localhost:27017/DMS",
"DataSourceUserName": "",
"DataSourcePassword": "",
"AuthenticationMethod": 0,
"UseDpApi": true,
"UseSSL": false,
"UseSSLSelfSigned": false
},
"RequireHttpsMetadata": false,
"EnableCaching": true,
"EnablePrincipalCaching": true,
"CacheDuration": 10,
"AuthenticationRequestTokenDuration": 7,
"ApiName": "api",
"ApiSecret": "",
"ClientId": "jeweldbserver",
"ClientSecret": "",
"AutoAuthorizeOnAuthentication": false,
"ExternalProvider": {
"Enabled": false,
"Name": "",
"ClientId": "",
"ClientSecret": "",
"Authority": ""
}
},
"DmsServer": {
"InstanceName": "JewelDMS",
"InstanceDisplayName": "JewelDMS",
"Urls": [ "http://localhost:5000" ],
"BaseUrl": "http://localhost:5000",
"InternalAddress": "http://localhost:5000",
"DatabaseOptions": {
"DataSource": "mongodb://localhost:27017/DMS",
"DataSourceUserName": "",
"DataSourcePassword": "",
"AuthenticationMethod": 0,
"UseDpApi": true,
"UseSSL": false,
"UseSSLSelfSigned": false
}
},
"NotificationServer": {
"InstanceName": "JewelDMSNotification",
"InstanceDisplayName": "JewelDMSNotification",
"Urls": [ "http://localhost:7000" ],
"BaseUrl": "http://localhost:7000",
"InternalAddress": "http://localhost:7000",
"Hub": "/NotificationHub",
"HubV2": "/NotificationHubV2",
"KeepAliveInterval": 15,
"HandshakeTimeout": 15
},
"Swagger": {
"PublicAuthority": "http://localhost:5500",
"OAuthClientId": "swagger",
"OAuthClientSecret": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
},
"HowClientShouldSendFiles": {
"MinFileSizeToSendIndividually": "256 Kb",
"MaxBatchSize": "1 Mb"
},
"DocumentSplit": {
"MaxVersions": 20000,
"MaxRelatedObjects": 20000,
"MaxActions": 20000,
"MaxValues": 20000,
"MaxProperties": 20000,
"MaxGroupDescriptors": 20000,
"MaxRetries": 50
}
}

In the table below there is an overview of the setting keys, their default values, and a short explanation of the setting key. These keys are generic , and valid for all server components.

Setting key: (default) value Explanation
Serilog:Using:Serilog.Sinks.Console, Serilog.Sinks.File Basic logsettings as fallback or default when settingsfile is not there for one of the servers.
MinimumLevel:Default:Warning For all logging methods, this sets the detail of the logging.
Diagnostics:LogRequestsLongerThan:5000 With this setting a log line will be added if a request takes longer then 5 seconds.
ElasticApm:Enabled:false, ServiceName:DMS Core server, ServiceVersion:2026.1,CentralConfig:true, ServerUrls:http://localhost:8200, LogLevel:Information Settings to configure elasticAPM, this enables advanced logging to be shown through the webinterface Kibana More information about this can be found on elasticAPM.
Storage:AssemblyName If you create your own assembly to handle storing files, put the assembly name here
Storage:ClassName From your own assembly, place the classname here.
DatabaseOptions: DataSource:mongodb://localhost:27017/DMS Connectionstring mongo for alternative mongo database.
DatabaseOptions:DataSourceUserName The mongo user name.
DatabaseOptions:DataSourcePassword The mongo password
DatabaseOptions:AuthenticationMethod:0 The Mongo authentication method. Use 0 for No authentication, 1 for database authentication and 2 for windows (LDAP) authentication.
UseSSL:false Indicates if ssl / tls should be used to connect to Mongo. Set this parameter to true if the Mongo instance requires Ssl / Tls connection.
UseSSLSelfSigned:false Indicates if Mongo is configured with a self signed certificate and thus does not performcertificate validations.
UseDpApi:false DPAPI is used in windows environments for encryption of the Mongo user password (in case of database authentication (authenticationmethod 1)).
Caching:Enabled:false When true, caching content server side.
Caching:ExpirationTimeInMin:120 After two hours, cached items are invalidated / stale and will be renewed, when retrieved.
IdentityServer:InstanceName:JewelDMSIdentity Name of the service.
IdentityServer:InstanceDisplayName:JewelDMSIdentity Name visible in service console.
IdentityServer:Urls:http://localhost:5500 Local connectionstring.
IdentityServer:Authority:http://localhost:5500 Address used between services usually same as url.
IdentityServer:PublicAuthority:http://localhost:5500 Connectionstring to be used via IIS.
IdentityServer:HostedOnMultipleEndpoints:true When true it allows for multiple endpoints to host the service.
IdentityServer:EnforceKestrel:true Enforces the use of kestrel.
IdentityServer:Signing: In case no certificate installed or thumbprint used, fall back to default certificate.
RequireHttpsMetadata:false If https is required for the authority, false only in development environments.
EnableCaching:true Not used for identityserver.
EnablePrincipalCaching:true Caching credentials big performance win when true.
CacheDuration:10 After 10 minutes cache is invalidated
AuthenticationRequestTokenDuration:7 A token requested will valid for 7 days
ApiName:api Name of the api resource used for authentication against introspection endpoint.
ApiSecret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX The "key" is your user ID, and the "secret" is your password to communicate with identityserver
ClientId:jeweldbserver Client communicating with identityserver.
AutoAuthorizeOnAuthentication:false Only used in development, user is always authenticated.
ExternalProvider: Here, external authentication providers can be added.
NotificationServer:Hub:/NotificationHub Entry point, used by signalR.
NotificationServer:HubV2: /NotificationHubV2 Entry point, used by signalR, v2 interface.
Swagger:PublicAuthority:http://localhost:5500 Url to use when connecting to swagger.
HowClientShouldSendFiles:MinFileSizeToSendIndividually:256 Kb Minimal size of content to be send to the server.
HowClientShouldSendFiles:MaxBatchSize:1 Mb Maximum size of content to be send to server.
DocumentSplit:MaxVersions:20000 Mongo documents are limited in size. To make sure that size is not reached, we split documents at forehand. E.g. a baseline contains max number of 20000 versions.
DocumentSplit: When all the numbers listed in the DocuementSplit section are reached, a baseline document is split up.

Content caching

To enable content caching, go to appsettings.json and set caching to true. Now, if a request for content is being made, DMS will return it from memory if available, offloading mongoDB.

"Storage": {
"AssemblyName": "",
"ClassName": "",
"DatabaseOptions": {
"DataSource": "mongodb://localhost:27017/DMS",
"DataSourceUserName": "",
"DataSourcePassword": "",
"AuthenticationMethod": 0,
"UseSSL": false,
"UseSSLSelfSigned": false,
"UseDpApi": false
},
"Caching": {
"Enabled": false,
"MemorySizeBytes": 2147483648,
"ExpirationTimeInMin": 120
}
}