Sisk

Поставщики услуг

Эта страница переведена с английского автоматически. Читать оригинал

Поставщики услуг - это способ переноса вашего приложения Sisk в разные среды с помощью переносимого файла конфигурации. Эта функция позволяет изменять порт сервера, параметры и другие настройки без необходимости изменения кода приложения для каждой среды. Этот модуль зависит от синтаксиса конструкции Sisk и может быть настроен через метод UsePortableConfiguration.

Поставщик конфигурации реализуется с помощью IConfigurationProvider, который предоставляет читатель конфигурации и может получать любую реализацию. По умолчанию, Sisk предоставляет читатель конфигурации JSON, но также есть пакет для файлов INI. Вы также можете создать свой собственный поставщик конфигурации и зарегистрировать его с:

C#
using var app = HttpServer.CreateBuilder()
    .UsePortableConfiguration(config =>
    {
        config.WithConfigReader<MyConfigurationReader>();
    })
    .Build();

Как упоминалось ранее, поставщик по умолчанию - это файл JSON. По умолчанию, имя файла, которое ищется, - это service-config.json, и он ищется в текущем каталоге запускаемого процесса, а не в каталоге исполняемого файла.

Вы можете выбрать изменение имени файла, а также указать, где Sisk должен искать файл конфигурации, с помощью:

C#
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. Этот файл имеет фиксированную структуру и состоит из следующих параметров:

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;"
        }
    }
}

Параметры, созданные из файла конфигурации, можно получить в конструкторе сервера:

C#
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НеобязательноУказывает свойства, предоставляемые методу настройки приложения.

Sisk распространяется с открытым исходным кодом по лицензии MIT.

Начните вводить, чтобы искать по документации и справочнику API.