Sisk

Proveedores de Servicios

Esta página fue traducida automáticamente del inglés. Leer el original

Los Proveedores de Servicios son una forma de portar su aplicación Sisk a diferentes entornos con un archivo de configuración portátil. Esta característica permite cambiar el puerto del servidor, parámetros y otras opciones sin tener que modificar el código de la aplicación para cada entorno. Este módulo depende de la sintaxis de construcción de Sisk y se puede configurar a través del método UsePortableConfiguration.

Un proveedor de configuración se implementa con IConfigurationProvider, que proporciona un lector de configuración y puede recibir cualquier implementación. Por defecto, Sisk proporciona un lector de configuración JSON, pero también hay un paquete para archivos INI. También puede crear su propio proveedor de configuración y registrararlo con:

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

Como se mencionó anteriormente, el proveedor predeterminado es un archivo JSON. Por defecto, el nombre del archivo que se busca es service-config.json, y se busca en el directorio actual del proceso en ejecución, no en el directorio del ejecutable.

Puede elegir cambiar el nombre del archivo, así como dónde Sisk debe buscar el archivo de configuración, con:

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();

El código anterior buscará el archivo config.toml en el directorio actual del proceso en ejecución. Si no se encuentra, luego buscará en el directorio donde se encuentra el ejecutable. Si el archivo no existe, el parámetro createIfDontExists se honra, creando el archivo, sin contenido, en la última ruta probada (basada en lookupDirectories), y se lanza un error en la consola, impidiendo que la aplicación se inicialice.

Consejo

Puede ver el código fuente del lector de configuración INI y el lector de configuración JSON para entender cómo se implementa un IConfigurationProvider.

Lectura de configuraciones desde un archivo JSON #

Por defecto, Sisk proporciona un proveedor de configuración que lee configuraciones desde un archivo JSON. Este archivo sigue una estructura fija y está compuesto por los siguientes parámetros:

JSON
{
    "Server": {
        "DefaultEncoding": "UTF-8",
        "ThrowExceptions": true,
        "IncludeRequestIdHeader": true
    },
    "ListeningHost": {
        "Label": "Mi aplicación Sisk",
        "Ports": [
            "http://localhost:80/",
            "https://localhost:443/",  // Los archivos de configuración también admiten comentarios
        ],
        "CrossOriginResourceSharingPolicy": {
            "AllowOrigin": "*",
            "AllowOrigins": [ "*" ],   // Nuevo en 0.14
            "AllowMethods": [ "*" ],
            "AllowHeaders": [ "*" ],
            "MaxAge": 3600
        },
        "Parameters": {
            "MySqlConnection": "server=localhost;user=root;"
        }
    }
}

Los parámetros creados a partir de un archivo de configuración se pueden acceder en el constructor del servidor:

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

Cada lector de configuración proporciona una forma de leer los parámetros de inicialización del servidor. Algunas propiedades se indican que deben estar en el entorno del proceso en lugar de estar definidas en el archivo de configuración, como datos de API sensibles, claves de API, etc.

Estructura del archivo de configuración #

El archivo de configuración JSON está compuesto por las siguientes propiedades:

PropiedadObligatorioDescripción
ServerRequeridoRepresenta el servidor en sí con sus configuraciones.
Server.AccessLogsStreamOpcionalPredeterminado en console. Especifica la secuencia de salida de los registros de acceso. Puede ser un nombre de archivo, null o console.
Server.ErrorsLogsStreamOpcionalPredeterminado en null. Especifica la secuencia de salida de los registros de errores. Puede ser un nombre de archivo, null o console.
Server.MaximumContentLengthOpcional
Server.MaximumContentLengthOpcionalPredeterminado en 0. Especifica la longitud máxima de contenido en bytes. Cero significa infinito.
Server.IncludeRequestIdHeaderOpcionalPredeterminado en false. Especifica si el servidor HTTP debe enviar el encabezado X-Request-Id.
Server.ThrowExceptionsOpcionalPredeterminado en true. Especifica si las excepciones no controladas deben lanzarse. Establezca en false cuando esté en producción y true cuando esté depurando.
ListeningHostRequeridoRepresenta el host de escucha del servidor.
ListeningHost.LabelOpcionalRepresenta la etiqueta de la aplicación.
ListeningHost.PortsRequeridoRepresenta una matriz de cadenas, que coincide con la sintaxis ListeningPort.
ListeningHost.CrossOriginResourceSharingPolicyOpcionalConfigura los encabezados CORS para la aplicación.
ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentialsOpcionalPredeterminado en false. Especifica el encabezado Allow-Credentials.
ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeadersOpcionalPredeterminado en null. Esta propiedad espera una matriz de cadenas. Especifica el encabezado Expose-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginOpcionalPredeterminado en null. Esta propiedad espera una cadena. Especifica el encabezado Allow-Origin.
ListeningHost.CrossOriginResourceSharingPolicy.AllowOriginsOpcionalPredeterminado en null. Esta propiedad espera una matriz de cadenas. Especifica múltiples encabezados Allow-Origin. Consulte AllowOrigins para obtener más información.
ListeningHost.CrossOriginResourceSharingPolicy.AllowMethodsOpcionalPredeterminado en null. Esta propiedad espera una matriz de cadenas. Especifica el encabezado Allow-Methods.
ListeningHost.CrossOriginResourceSharingPolicy.AllowHeadersOpcionalPredeterminado en null. Esta propiedad espera una matriz de cadenas. Especifica el encabezado Allow-Headers.
ListeningHost.CrossOriginResourceSharingPolicy.MaxAgeOpcionalPredeterminado en null. Esta propiedad espera un entero. Especifica el encabezado Max-Age en segundos.
ListeningHost.ParametersOpcionalEspecifica las propiedades proporcionadas al método de configuración de la aplicación.

Escribe para buscar en la documentación y en la referencia de la API.