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

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

C#
using var app = HttpServer.CreateBuilder()
    .UsePortableConfiguration(config =>
    {
        config.WithParameters(paramCollection =>
        {
            string databaseConnection = paramCollection.GetValueOrThrow("MySqlConnection");
        });
    })
    .Build();

Каждый считыватель конфигурации предоставляет способ чтения параметров инициализации сервера. Некоторые свойства указываются в окружении процесса, а не в файле конфигурации, например чувствительные данные API, ключи API и т.д.

Структура файла конфигурации #

СвойствоОбязательноОписание
ServerRequiredПредставляет сам сервер с его настройками.
Server.AccessLogsStreamOptionalПо умолчанию console. Указывает поток вывода журнала доступа. Может быть именем файла, null или console.
Server.ErrorsLogsStreamOptionalПо умолчанию null. Указывает поток вывода журнала ошибок. Может быть именем файла, null или console.
Server.MaximumContentLengthOptional
Server.MaximumContentLengthOptionalУказывает максимальную длину содержимого в байтах. Ноль означает бесконечность. Когда объект Server присутствует и это свойство опущено, значение равно 0 (бесконечно), что переопределяет значение по умолчанию 100 МБ свойства HttpServerConfiguration.MaximumContentLength.
Server.IncludeRequestIdHeaderOptionalПо умолчанию false. Указывает, должен ли HTTP‑сервер отправлять заголовок X-Request-Id.
Server.ThrowExceptionsOptionalПо умолчанию true. Указывает, должны ли выбрасываться необработанные исключения. Установите false в продакшн‑среде и true при отладке.
ListeningHostRequiredПредставляет хост, прослушиваемый сервером.
ListeningHost.LabelOptionalПредставляет метку приложения.
ListeningHost.PortsRequiredПредставляет массив строк, соответствующий синтаксису ListeningPort.
ListeningHost.CrossOriginResourceSharingPolicyOptionalНастраивает заголовки CORS для приложения.
ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentialsOptionalПо умолчанию false. Указывает заголовок Allow-Credentials.
ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeadersOptionalПо умолчанию null. Ожидает массив строк. Указывает заголовок Expose-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginOptionalПо умолчанию null. Ожидает строку. Указывает заголовок Allow-Origin.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginsOptionalПо умолчанию null. Ожидает массив строк. Указывает несколько заголовков Allow-Origin. См. AllowOrigins для получения дополнительной информации.
ListeningHost.CrossOriginResourceSharingPolicy.AllowMethodsOptionalПо умолчанию null. Ожидает массив строк. Указывает заголовок Allow-Methods.
ListeningHost.CrossOriginResourceSharingPolicy.AllowHeadersOptionalПо умолчанию null. Ожидает массив строк. Указывает заголовок Allow-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.MaxAgeOptionalПо умолчанию null. Ожидает целое число. Указывает заголовок Max-Age в секундах.
ListeningHost.ParametersOptionalУказывает свойства, передаваемые методу настройки приложения.

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

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