Поставщики услуг
Эта страница переведена с английского автоматически. Читать оригинал
Поставщики услуг - это способ переноса вашего приложения 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": "Мое приложение Sisk",
"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 и т. д.
Структура файла конфигурации #
Файл конфигурации JSON состоит из следующих свойств:
| Свойство | Обязательное | Описание |
|---|---|---|
| Server | Требуется | Представляет сам сервер с его настройками. |
| Server.AccessLogsStream | Необязательно | По умолчанию console. Указывает поток вывода журнала доступа. Может быть именем файла, null или console. |
| Server.ErrorsLogsStream | Необязательно | По умолчанию null. Указывает поток вывода журнала ошибок. Может быть именем файла, null или console. |
| Server.MaximumContentLength | Необязательно | |
| Server.MaximumContentLength | Необязательно | По умолчанию 0. Указывает максимальную длину содержимого в байтах. Ноль означает бесконечность. |
| Server.IncludeRequestIdHeader | Необязательно | По умолчанию false. Указывает, должен ли HTTP-сервер отправлять заголовок X-Request-Id. |
| Server.ThrowExceptions | Необязательно | По умолчанию true. Указывает, должны ли быть выброшены необработанные исключения. Установите в false при производстве и true при отладке. |
| ListeningHost | Требуется | Представляет хост, на котором слушает сервер. |
| ListeningHost.Label | Необязательно | Представляет метку приложения. |
| ListeningHost.Ports | Требуется | Представляет массив строк, соответствующих синтаксису ListeningPort. |
| ListeningHost.CrossOriginResourceSharingPolicy | Необязательно | Настройка заголовков CORS для приложения. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentials | Необязательно | По умолчанию false. Указывает заголовок Allow-Credentials. |
| ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeaders | Необязательно | По умолчанию null. Это свойство ожидает массив строк. Указывает заголовок Expose-Headers. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigin | Необязательно | По умолчанию null. Это свойство ожидает строку. Указывает заголовок Allow-Origin. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigins | Необязательно | По умолчанию null. Это свойство ожидает массив строк. Указывает несколько заголовков Allow-Origin. См. AllowOrigins для получения дополнительной информации. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowMethods | Необязательно | По умолчанию null. Это свойство ожидает массив строк. Указывает заголовок Allow-Methods. |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowHeaders | Необязательно | По умолчанию null. Это свойство ожидает массив строк. Указывает заголовок Allow-Headers. |
| ListeningHost.CrossOriginResourceSharingPolicy.MaxAge | Необязательно | По умолчанию null. Это свойство ожидает целое число. Указывает заголовок Max-Age в секундах. |
| ListeningHost.Parameters | Необязательно | Указывает свойства, предоставляемые методу настройки приложения. |