Es ist eine gute Idee zu versuchen, dein Projekt zuerst auf den Blob-Speicher hochzuladen, aber das ist es, was Visual Studio sowieso hinter der Szene für dich tut. Wie bereits an anderer Stelle erwähnt, handelt es sich bei der Bereitstellung meist nicht um das Hochladen selbst, sondern um das Stoppen und Starten aller Aktualisierungsdomänen.
Wenn Sie diese Site nur in einer Entwicklungsumgebung ausführen, ist die einzige Möglichkeit, die Geschwindigkeit zu erhöhen, die Ausführung nur einer Instanz. Wenn das die Live-Umgebung ist, dann ... Entschuldigung, ich denke, du hast kein Glück.
Damit ich nicht in der Cloud bereitstellen muss, um geringfügige Änderungen zu testen, habe ich herausgefunden, dass die Website so entwickelt wird, dass sie wie jede andere MVC-Site im lokalen IIS ausgeführt wird.
Das größte Hindernis für diese Arbeit sind Einstellungen, die Sie in der Cloud-Konfiguration haben. Um dies zu umgehen, kopieren Sie alle Einstellungen in Ihrer Cloud-Konfiguration und legen sie in Ihrer web.config in den appSettings ab. Erstellen Sie dann statt RoleEnvironment.GetConfigurationSettingValue()
eine Wrapper-Klasse, die Sie stattdessen aufrufen. Diese Wrapperklasse überprüft RoleEnvironment.IsAvailable
, um festzustellen, ob sie in der Azure-Fabric ausgeführt wird. Wenn dies der Fall ist, ruft sie die oben übliche Konfigurationsfunktion auf, andernfalls ruft sie auf.
Es gibt ein paar andere Dinge, die Sie rund um tun wollen werden die Konfigurationseinstellung ändern, Ereignisse, die hoffentlich Sie aus dem folgenden Code herausfinden können:
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;
}
}
}
Ich fange an, Ihren Ansatz mehr und mehr zu mögen. Eine Frage jedoch: Behalten Sie dann alle Ihre js-Dateien, Bilder usw. getrennt von de Projekt (in VS, das ist) oder konfigurieren Sie sie einfach als nicht Teil des veröffentlichten Pakets? –
Ich habe mich entschieden, mit dieser Antwort zu gehen, da es am praktischsten erscheint, wenn endlich akzeptiert wird, dass eine vollständige Bereitstellung ein langsamer Prozess sein wird, egal was passiert. –
http://blogs.msdn.com/b/jnak/archive/2010/10/29/rapid-developer-deploy-to-azure.aspx –