gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 5 中未调用 Azure RoleEnvironment.Changing 事件

转载 作者:行者123 更新时间:2023-12-03 01:52:25 25 4
gpt4 key购买 nike

我正在尝试使用 Azure Runtime Reconfiguration Pattern允许我通过 PowerShell(后来由 Microsoft Azure 网站管理库)更改普通 Web.config 文件中的 appSetting。

我的问题是 RoleEnvironment.Changing我的 MVC 应用程序中未调用事件,因此 Web 应用程序正在重新启动。我已将事件设置代码放置在 MVC Application_Start 中,如 Azure 文章中所述,即

protected void Application_Start()
{
RoleEnvironment.Changing += RoleEnvironment_Changing;
RoleEnvironment.Changed += RoleEnvironment_Changed;

//normal MVC code etc...
AreaRegistration.RegisterAllAreas();
}

事件处理程序是 Azure 文章中处理的直接副本,如下所示:

    private const string CustomSettingName = "TestConfig";

public static string TestConfigValue;

private static void RoleEnvironment_Changing(object sender,
RoleEnvironmentChangingEventArgs e)
{
RoleLogs.Add("RoleEnvironment_Changing: started");

var changedSettings = e.Changes.OfType<RoleEnvironmentConfigurationSettingChange>()
.Select(c => c.ConfigurationSettingName).ToList();
Trace.TraceInformation("Changing notification. Settings being changed: "
+ string.Join(", ", changedSettings));

if (changedSettings
.Any(settingName => !string.Equals(settingName, CustomSettingName,
StringComparison.Ordinal)))
{
Console.WriteLine("Cancelling dynamic configuration change (restarting).");
RoleLogs.Add("RoleEnvironment_Changing: restarting!");
// Setting this to true will restart the role gracefully. If Cancel is not
// set to true, and the change is not handled by the application, the
// application will not use the new value until it is restarted (either
// manually or for some other reason).
e.Cancel = true;
}
else
{
RoleLogs.Add("RoleEnvironment_Changing: change is OK. Not restarting");
Console.WriteLine("Handling configuration change without restarting. ");
}
}


private static void RoleEnvironment_Changed(object sender,
RoleEnvironmentChangedEventArgs e)
{
RoleLogs.Add("RoleEnvironment_ChangED: Starting");
Console.WriteLine("Updating instance with new configuration settings.");

foreach (var settingChange in
e.Changes.OfType<RoleEnvironmentConfigurationSettingChange>())
{
if (string.Equals(settingChange.ConfigurationSettingName,
CustomSettingName,
StringComparison.Ordinal))
{
// Execute a function to update the configuration of the component.
RoleLogs.Add("RoleEnvironment_ChangED: TestConfig has changed");
Console.WriteLine("TestConfig has changed.");
TestConfigValue = RoleEnvironment.GetConfigurationSettingValue(CustomSettingName);
}
}
}

我添加了日志,证明我的 RoleEnvironment_ChangingRoleEnvironment_Changed 没有在 MVC WebApp 中调用,这意味着当我通过 PowerShell 更改 appSetting 时,WebApp 会重新启动。这也意味着 RoleEnvironment.Changing 事件永远不会到达 WebJob。

我使用的是 Azure SDK 2.7.0

有什么想法吗?

更新

@richag 给​​了我一个答案,这让我意识到我的问题是因为我使用的是应用服务而不是云服务。这个SO answer再加上这个video (参见 5:00 分钟)谈论差异(注意:视频很旧,因此网络应用程序的名称不同,但概念是相同的)。

我真的不想在开发后期进行更改,并且我已经用另一种方式解决了这个问题。也许在下一个项目中,我会关注云服务,因为我可以看到一些积极的方面,例如更好地控制我的 WebJobs 配置。

最佳答案

来自运行时重新配置模式:“Microsoft Azure 云服务角色检测并公开托管环境检测到 ServiceConfiguration.cscfg 文件更改时引发的两个事件”如果您对 app.config 进行更改,则不会触发这些事件/web.config 文件。仅当云服务配置发生更改时,即通过 Azure 门户的配置选项卡上传新的配置文件或直接在 Azure 门户上更改设置时。

关于asp.net-mvc - ASP.NET MVC 5 中未调用 Azure RoleEnvironment.Changing 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33733507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com