Es una buena idea intentar subir su proyecto primero al almacenamiento de blob, pero desafortunadamente esto es lo que Visual Studio está haciendo por usted detrás de la escena de todos modos. Como se ha señalado en otro lugar, la mayor parte del tiempo en la implementación no es la carga en sí, sino la detención y el inicio de todos sus dominios de actualización.
Si solo está ejecutando este sitio en un entorno de desarrollo, entonces la única forma que conozco de acelerarlo es ejecutar solo una instancia. Si este es el ambiente en vivo, entonces ... lo siento, creo que no tienes suerte.
Para no tener que implementar en la nube para probar cambios menores, lo que he encontrado funciona bastante bien es diseñar el sitio para que funcione cuando se ejecuta en IIS local al igual que cualquier otro sitio de MVC.
La mayor barrera para este funcionamiento es la configuración que tiene en la configuración de la nube. La forma en que solucionamos esto es hacer una copia de todas las configuraciones en su configuración de nube y ponerlas en su web.config en la configuración de la aplicación. Luego, en lugar de utilizar RoleEnvironment.GetConfigurationSettingValue()
, cree una clase contenedora a la que llame en su lugar. Esta clase contenedora marca RoleEnvironment.IsAvailable
para ver si se está ejecutando en el tejido Azure, si es así, llama a la función de configuración habitual anterior, si no, llama al WebConfigurationManager.AppSettings[]
.
Hay algunas otras cosas que usted querrá hacer en torno a conseguir los eventos de cambio de ajuste de configuración que se espera se puede averiguar a partir del código a continuación:
public class SmartConfigurationManager
{
private static bool _addConfigChangeEvents;
private static string _configName;
private static Func<string, bool> _configSetter;
public static bool AddConfigChangeEvents
{
get { return _addConfigChangeEvents; }
set
{
_addConfigChangeEvents = value;
if (value)
{
RoleEnvironment.Changing += RoleEnvironmentChanging;
}
else
{
RoleEnvironment.Changing -= RoleEnvironmentChanging;
}
}
}
public static string Setting(string configName)
{
if (RoleEnvironment.IsAvailable)
{
return RoleEnvironment.GetConfigurationSettingValue(configName);
}
return WebConfigurationManager.AppSettings[configName];
}
public static Action<string, Func<string, bool>> GetConfigurationSettingPublisher()
{
if (RoleEnvironment.IsAvailable)
{
return AzureSettingsGet;
}
return WebAppSettingsGet;
}
public static void WebAppSettingsGet(string configName, Func<string, bool> configSetter)
{
configSetter(WebConfigurationManager.AppSettings[configName]);
}
public static void AzureSettingsGet(string configName, Func<string, bool> configSetter)
{
// We have to store these to be used in the RoleEnvironment Changed handler
_configName = configName;
_configSetter = configSetter;
// Provide the configSetter with the initial value
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
if (AddConfigChangeEvents)
{
RoleEnvironment.Changed += RoleEnvironmentChanged;
}
}
private static void RoleEnvironmentChanged(object anotherSender, RoleEnvironmentChangedEventArgs arg)
{
if ((arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>().Any(change => change.ConfigurationSettingName == _configName)))
{
if ((_configSetter(RoleEnvironment.GetConfigurationSettingValue(_configName))))
{
RoleEnvironment.RequestRecycle();
}
}
}
private static void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
{
// If a configuration setting is changing
if ((e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)))
{
// Set e.Cancel to true to restart this role instance
e.Cancel = true;
}
}
}
Estoy empezando a gustarme su enfoque cada vez más. Sin embargo, una pregunta: ¿guarda usted todos sus archivos js, imágenes, etc. separados de de project (en VS, eso es) o simplemente los configura como no formando parte del paquete publicado? –
He decidido seguir con esta respuesta, ya que parece ser la más práctica cuando finalmente acepto que un despliegue completo será un proceso lento sin importar nada. –
http://blogs.msdn.com/b/jnak/archive/2010/10/29/rapid-developer-deploy-to-azure.aspx –