porta microsoft management azure azure-sql-database azure-service-fabric

microsoft - panel azure login



¿Dónde establece y accede a los parámetros de configuración de tiempo de ejecución por entorno para la estructura de servicio? (3)

Para dos entornos, local y en la nube, ¿cómo establecería una configuración personalizada o parámetros para recursos tales como bases de datos SQL, cuentas de almacenamiento, etc. Idealmente sería un nombre de parámetro llamado en código, por ejemplo, apunte un DbContext hacia un particular base de datos, que en configuraciones para un entorno local o en la nube sea diferente. Gracias.


Las respuestas anteriores explican bien cómo se hace. Quiero agregar una marca secundaria, por qué es eso '' complicado '':

Tiene que ser así, ya que los servicios están destinados a ser autónomos. Deben ejecutarse por defecto en cualquier aplicación a la que estén vinculados. Independiente del manifiesto de la aplicación. Por lo tanto, el servicio solo puede confiar en parámetros, que al menos están predefinidos en su propia configuración.

Estos ajustes preestablecidos pueden ser sobrescritos por la aplicación. Este es el único enfoque universal.


Para tener variables por entorno para ejecutar Service Fabric localmente y en la nube, esto es lo que debe hacer:

  1. Agregue su sección de configuración personalizada y sus parámetros al archivo Settings.xml del proyecto Service / Actor (ubicado en / PackageRoot / Config / Settings.xml desde la raíz del proyecto). Deje los parámetros en blanco ya que los configuraremos en otro lugar por entorno. Aquí hay un ejemplo.

<?xml version="1.0" encoding="utf-8" ?> <Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric"> <!-- Add your custom configuration sections and parameters here --> <Section Name="UserDatabase"> <Parameter Name="UserDatabaseConnectionString" Value="" /> </Section> </Settings>

  1. En el archivo ApplicationManifest.xml de su proyecto de Service Fabric, habrá elementos <ServiceManifestImport> para cada uno de sus proyectos incluidos. Debajo habrá un elemento <ConfigOverrides> donde declararemos qué valores para nuestras configuraciones serán suplantados por los valores establecidos por entorno en los archivos xml locales y en la nube debajo de ApplicationParameters en nuestro proyecto de Service Fabric. En ese mismo archivo ApplicationManifest.xml, deberá agregar el parámetro que estará presente en los archivos xml locales y en la nube, de lo contrario, se sobrescribirán en la compilación.

Continuando con el ejemplo anterior, así es como se configuraría.

<Parameters> <Parameter Name="ServiceName_InstanceCount" DefaultValue="-1" /> <Parameter Name="UserDatabaseConnectionString" DefaultValue="" /> </Parameters> <ConfigOverrides> <ConfigOverride Name="Config"> <Settings> <Section Name="UserDatabase"> <Parameter Name="UserDatabaseConnectionString" Value="[UserDatabaseConnectionString]" /> </Section> </Settings> </ConfigOverride> </ConfigOverrides>

  1. En los archivos local.xml y cloud.xml debajo de ApplicationParameters en su proyecto de Service Fabric, especificará las variables específicas de su entorno de esta manera.

<?xml version="1.0" encoding="utf-8"?> <Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric"> <Parameters> <Parameter Name="ServiceName_InstanceCount" Value="1" /> <Parameter Name="UserDatabaseConnectionString" Value="Server=(localdb)/MsSqlLocalDb;Database=Users;User=ReadOnlyUser;Password=XXXXX;" /> </Parameters> </Application>

  1. Finalmente, en su Servicio / Actor puede acceder a estas variables de configuración por entorno de esta manera.

var configurationPackage = Context.CodePackageActivationContext.GetConfigurationPackageObject("Config"); var connectionStringParameter = configurationPackage.Settings.Sections["UserDatabase"].Parameters["UserDatabaseConnectionString"];


Puede usar variables de entorno como cualquier otra aplicación, esto también funciona con el ejecutable invitado dentro de la estructura de servicio a diferencia de settings.xml ya que esto requiere el tiempo de ejecución de la estructura de servicio incorporado.

Dentro de su aplicación, puede acceder a las variables de entorno como cualquier otra aplicación .net a través del método GetEnvironmentVariable en la clase Environment :

var baseUri = Environment.GetEnvironmentVariable("SuperWebServiceBaseUri");

Luego, necesitamos configurar algunos valores de variables de entorno predeterminados, esto se hace dentro del archivo de manifiesto ServiceManifest.xml del servicio.

<?xml version="1.0" encoding="utf-8" ?> <ServiceManifest Name="MyServicePkg" Version="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- snip --> <CodePackage Name="Code" Version="1.0.0"> <!-- snip --> <EnvironmentVariables> <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="http://localhost:12345"/> </EnvironmentVariables> </CodePackage> <!-- snip --> </ServiceManifest>

Estas variables de entorno se pueden anular dentro del archivo ApplicationManifest.xml utilizando el siguiente código:

<?xml version="1.0" encoding="utf-8"?> <ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="ChileTargetType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric"> <Parameters> <!-- snip --> </Parameters> <ServiceManifestImport> <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" /> <EnvironmentOverrides CodePackageRef="Code"> <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="https://the-real-live-super-base-uri.com/"/> </EnvironmentOverrides> </ServiceManifestImport> <!-- snip --> </ApplicationManifest>

Esto se puede parametrizar como cualquier otra configuración de manifiesto de aplicación utilizando local.xml y cloud.xml .

<?xml version="1.0" encoding="utf-8"?> <Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric"> <Parameters> <Parameter Name="MyService_SuperWebServiceBaseUri" Value="https://another-base-uri.com/" /> </Parameters> </Application>

Luego tendremos que actualizar ApplicationManifest.xml para admitir estos parámetros;

<?xml version="1.0" encoding="utf-8"?> <ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="ChileTargetType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric"> <Parameters> <Parameter Name="MyService_SuperWebServiceBaseUri" DefaultValue="https://the-real-live-super-base-uri.com/" /> </Parameters> <ServiceManifestImport> <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" /> <EnvironmentOverrides CodePackageRef="Code"> <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="[MyService_SuperWebServiceBaseUri]"/> </EnvironmentOverrides> </ServiceManifestImport> <!-- snip --> </ApplicationManifest>