Поставщики сервисов
Эта страница переведена с английского автоматически. Читать оригинал
Поставщики сервисов — это способ перенести ваше приложение Sisk в разные среды с помощью переносимого файла конфигурации. Эта возможность позволяет изменять порт сервера, параметры и другие опции, не меняя код приложения для каждой среды. Этот модуль зависит от синтаксиса построения Sisk и может быть настроен через метод UsePortableConfiguration.
Поставщик конфигурации реализуется с помощью IConfigurationProvider, который предоставляет считыватель конфигурации и может принимать любую реализацию. По умолчанию Sisk предоставляет JSON‑считыватель конфигурации, но также существует пакет для INI‑файлов. Вы также можете создать собственный поставщик конфигурации и зарегистрировать его с помощью:
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithConfigReader<MyConfigurationReader>();
})
.Build();Как упоминалось ранее, провайдер по умолчанию — это JSON‑файл. По умолчанию ищется файл с именем service-config.json, и поиск производится в текущем каталоге работающего процесса, а не в каталоге исполняемого файла.
Вы можете изменить имя файла, а также указать, где Sisk должен искать файл конфигурации, с помощью:
using Sisk.Core.Http;
using Sisk.Core.Http.Hosting;
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithConfigFile("config.toml",
createIfDontExists: true,
lookupDirectories:
ConfigurationFileLookupDirectory.CurrentDirectory |
ConfigurationFileLookupDirectory.AppDirectory);
})
.Build();Приведённый выше код будет искать файл config.toml в текущем каталоге работающего процесса. Если файл не найден, будет выполнен поиск в каталоге, где находится исполняемый файл. Если файл не существует, параметр createIfDontExists будет учтён: файл будет создан без содержимого в последнем проверенном пути (в зависимости от lookupDirectories), и в консоли будет выведена ошибка, препятствующая инициализации приложения.
Совет
Вы можете посмотреть исходный код INI‑считывателя конфигурации и JSON‑считывателя конфигурации, чтобы понять, как реализован IConfigurationProvider.
Чтение конфигураций из JSON‑файла #
По умолчанию Sisk предоставляет поставщик конфигурации, который читает настройки из JSON‑файла. Этот файл имеет фиксированную структуру и состоит из следующих параметров:
{
"Server": {
"DefaultEncoding": "UTF-8",
"ThrowExceptions": true,
"IncludeRequestIdHeader": true
},
"ListeningHost": {
"Label": "My sisk application",
"Ports": [
"http://localhost:80/",
"https://localhost:443/", // Файлы конфигурации также поддерживают комментарии
],
"CrossOriginResourceSharingPolicy": {
"AllowOrigin": "*",
"AllowOrigins": [ "*" ], // новое в версии 0.14
"AllowMethods": [ "*" ],
"AllowHeaders": [ "*" ],
"MaxAge": 3600
},
"Parameters": {
"MySqlConnection": "server=localhost;user=root;"
}
}
}Параметры, созданные из файла конфигурации, можно получить в конструкторе сервера:
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithParameters(paramCollection =>
{
string databaseConnection = paramCollection.GetValueOrThrow("MySqlConnection");
});
})
.Build();Каждый считыватель конфигурации предоставляет способ чтения параметров инициализации сервера. Некоторые свойства указываются в окружении процесса, а не в файле конфигурации, например чувствительные данные API, ключи API и т.д.
Структура файла конфигурации #
| Свойство | Обязательно | Описание |
|---|---|---|
| Server | Required | Представляет сам сервер с его настройками. |
| Server.AccessLogsStream | Optional | По умолчанию console. Указывает поток вывода журнала доступа. Может быть именем файла, null или console. |
| Server.ErrorsLogsStream | Optional | По умолчанию null. Указывает поток вывода журнала ошибок. Может быть именем файла, null или console. |
| Server.MaximumContentLength | Optional | |
| Server.MaximumContentLength | Optional | Указывает максимальную длину содержимого в байтах. Ноль означает бесконечность. Когда объект Server присутствует и это свойство опущено, значение равно 0 (бесконечно), что переопределяет значение по умолчанию 100 МБ свойства HttpServerConfiguration.MaximumContentLength. |
| Server.IncludeRequestIdHeader | Optional | По умолчанию false. Указывает, должен ли HTTP‑сервер отправлять заголовок X-Request-Id. |
| Server.ThrowExceptions | Optional | По умолчанию true. Указывает, должны ли выбрасываться необработанные исключения. Установите false в продакшн‑среде и true при отладке. |
| ListeningHost | Required | Представляет хост, прослушиваемый сервером. |
| ListeningHost.Label | Optional | Представляет метку приложения. |
| ListeningHost.Ports | Required | Представляет массив строк, соответствующий синтаксису ListeningPort. |
| ListeningHost.CrossOriginResourceSharingPolicy | Optional | Настраивает заголовки CORS для приложения. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentials | Optional | По умолчанию false. Указывает заголовок Allow-Credentials. |
| ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeaders | Optional | По умолчанию null. Ожидает массив строк. Указывает заголовок Expose-Headers. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigin | Optional | По умолчанию null. Ожидает строку. Указывает заголовок Allow-Origin. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigins | Optional | По умолчанию null. Ожидает массив строк. Указывает несколько заголовков Allow-Origin. См. AllowOrigins для получения дополнительной информации. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowMethods | Optional | По умолчанию null. Ожидает массив строк. Указывает заголовок Allow-Methods. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowHeaders | Optional | По умолчанию null. Ожидает массив строк. Указывает заголовок Allow-Headers. |
| ListeningHost.CrossOriginResourceSharingPolicy.MaxAge | Optional | По умолчанию null. Ожидает целое число. Указывает заголовок Max-Age в секундах. |
| ListeningHost.Parameters | Optional | Указывает свойства, передаваемые методу настройки приложения. |