Este tema aún no ha recibido ninguna valoración - Valorar este tema

Leer la configuración de la biblioteca cliente de almacenamiento y administrar las opciones que han cambiado

Actualizado: mayo de 2011

Si tiene un servicio hospedado que utiliza la biblioteca de cliente de almacenamiento de Windows Azure para tener acceso a su cuenta de almacenamiento de Windows Azure, se recomienda que almacene la cadena de conexión en el archivo de configuración del servicio. Almacenar la cadena de conexión en el archivo de configuración del servicio permite que un servicio implementado responda a los cambios de configuración sin implementar de nuevo la aplicación. Estos son algunos ejemplos de las ventajas:

  • Pruebas: si utiliza una cuenta de pruebas mientras la aplicación se implementa en el entorno de ensayo y debe cambiarla a la cuenta activa cuando se mueve la aplicación al entorno de producción.

  • Seguridad: si debe rotar las claves de la cuenta de almacenamiento debido a que la clave en uso puede correr peligro.

Para obtener más información sobre la configuración de la cadena de conexión, vea Cómo configurar cadenas de conexión.

Hay dos modelos que se pueden implementar para administrar el cambio de configuración:

  • Si la aplicación tolera el reinicio sin afectar al servicio, se puede detectar el cambio y rechazarlo, haciendo que, de este modo, la instancia de rol se recicle después de que los extremos se hayan retirado de la iteración del equilibrador de carga. Normalmente, los sitios web pertenecen a esta categoría. Esta es la manera más simple y fácil de administrar el cambio.

  • Si la aplicación es de ejecución prolongada o por cualquier otro motivo no puede admitir el reinicio sin problemas cuando se produce un cambio, puede actualizar la configuración del servicio hospedado mientras se ejecuta, sin desconectar la instancia de rol, realizando una actualización en caliente de la configuración.

La biblioteca administrada de Windows Azure incluye el espacio de nombres Microsoft.WindowsAzure.ServiceRuntime, que proporciona las clases para interactuar con el entorno de Windows Azure desde el código que se ejecuta en una instancia de un rol. La clase RoleEnvironment define los eventos Changing y Changed que se inician antes y después de un cambio de configuración. Puede controlar estos eventos y responder al cambio.

  1. Abra el archivo de código fuente que contiene la clase de punto de entrada para el rol, por ejemplo WebRole.cs.

  2. Asegúrese de que el proyecto haga referencia al archivo Microsoft.WindowsAzure.ServiceRuntime.dll y de que la siguiente instrucción de uso se agregue al archivo:

    using Microsoft.WindowsAzure.ServiceRuntime;
    
  3. Agregue el siguiente código al método OnStart de la clase de punto de entrada del rol para especificar el controlador de eventos:

    public override bool OnStart()
    {
      RoleEnvironment.Changing += 
        (object ignored, RoleEnvironmentChangingEventArgs e) =>
        {
          var settingChanges = e.Changes.OfType<RoleEnvironmentConfigurationSettingChange>();
          foreach (var settingChange in settingChanges)
          {
            // Recycle the role when MyStorageConnectionString setting changes.
            // You must replace "MyStorageConnectionString" with the name of your storage
            // connection string as configured in your .csdef file.
            // If you have additional configuration settings that you want to reject 
            // you should configure them here.
            if (settingChange.ConfigurationSettingName.Equals
              ("MyStorageConnectionString", StringComparison.InvariantCultureIgnoreCase))
            {
                e.Cancel = true;
            }
          }
       };
       return base.OnStart();
    }
    
  4. Guarde el archivo.

Antes de poder detectar los cambios de configuración para una actualización en caliente, debe especificar de dónde recuperar la información de configuración. En lugar de usar como valor predeterminado un archivo de configuración concreto, CloudStorageAccount requiere que se establezca un delegado utilizando configSetter para recuperar el archivo de configuración correcto.

  1. Abra el archivo de código fuente que contiene la clase de punto de entrada para el rol, por ejemplo WebRole.cs.

  2. Asegúrese de que el proyecto haga referencia al archivo Microsoft.WindowsAzure.ServiceRuntime.dll y de que la siguiente instrucción de uso se agregue al archivo:

    using Microsoft.WindowsAzure.ServiceRuntime;
    
  3. Si está utilizando un rol web de IIS completo o un rol de trabajo, agregue el siguiente código al método OnStart para especificar el controlador de eventos:

    public class WebRole : RoleEntryPoint
    {
      public override bool OnStart()
      {
        #region Setup CloudStorageAccount Configuration Setting Publisher
        // This code sets up a handler to update CloudStorageAccount instances when the 
        // corresponding configuration settings change in the service configuration file.
        CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
        {
          // Provide the configSetter with the initial value.
          configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
    
          RoleEnvironment.Changed += (ignored, arg) =>
          {
            if (arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>()
                .Any((change) => (change.ConfigurationSettingName == configName)))
            {
              // The corresponding configuration setting has changed, propagate the value.
              if (!configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)))
              {
                // In this case, the change to the storage account credentials in the
                // service configuration is significant enough that the role needs to be
                // recycled in order to use the latest settings. (for example, the 
                // endpoint has changed)
                RoleEnvironment.RequestRecycle();
              }
            }
          };
        });
        #endregion
        return base.OnStart();
      }
    }
    
  4. Si está utilizando un rol web de IIS completo, agregue el siguiente método de control de eventos al archivo de código fuente Global.asax:

    void Application_Start(object sender, EventArgs e)
    {
       // Code that runs on application startup
       #region Setup CloudStorageAccount Configuration Setting Publisher
    
       // This code sets up a handler to update CloudStorageAccount instances when their 
       // corresponding configuration settings change in the service configuration file.
       CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
       {
          // Provide the configSetter with the initial value
          configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
    
          RoleEnvironment.Changed += (ignored, arg) =>
          {
             if (arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>()
                .Any((change) => (change.ConfigurationSettingName == configName)))
             {
                // The corresponding configuration setting has changed, propagate the value.
                if (!configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)))
                {
                   // In this case, the change to the storage account credentials in the
                   // service configuration is significant enough that the role needs to be
                   // recycled in order to use the latest settings. (for example, the 
                   // endpoint has changed)
                   RoleEnvironment.RequestRecycle();
                }
             }
          };
       });
       #endregion
    }
    
  5. Guarde el archivo.

Vea también

¿Te ha resultado útil?
(Caracteres restantes: 1500)

Adiciones de comunidad

© 2013 Microsoft. Reservados todos los derechos.
facebook page visit twitter rss feed newsletter