应用程序抛出web.config被修改的exception,但事实并非如此

我的asp.net网络表单网站上的azure app服务面临着奇怪的问题。

得到例外:

ConfigurationErrorsExceptionSystem.Configuration.BaseConfigurationRecord in EvaluateOne The configuration file has been changed by another program. (D:\home\site\wwwroot\web.config) ConfigurationErrorsException: The configuration file has been changed by another program. (D:\home\site\wwwroot\web.config) Module "System.Configuration.BaseConfigurationRecord", line 72, col 0, in EvaluateOne System.Object EvaluateOne(System.String[], System.Configuration.SectionInput, Boolean, System.Configuration.FactoryRecord, System.Configuration.SectionRecord, System.Object) Module "System.Configuration.BaseConfigurationRecord", line 515, col 0, in Evaluate Boolean Evaluate(System.Configuration.FactoryRecord, System.Configuration.SectionRecord, System.Object, Boolean, Boolean, System.Object ByRef, System.Object ByRef) Module "System.Configuration.BaseConfigurationRecord", line 666, col 0, in GetSectionRecursive Void GetSectionRecursive(System.String, Boolean, Boolean, Boolean, Boolean, System.Object ByRef, System.Object ByRef) Module "System.Configuration.BaseConfigurationRecord", line 0, col 0, in GetSection System.Object GetSection(System.String) Module "System.Web.Configuration.RuntimeConfig", line 0, col 0, in GetSectionObject System.Object GetSectionObject(System.String) Module "System.Web.Configuration.RuntimeConfig", line 19, col 0, in GetSection System.Object GetSection(System.String, System.Type, ResultsIndex) Module "System.Web.Configuration.RuntimeConfig", line 0, col 0, in get_Authorization System.Web.Configuration.AuthorizationSection get_Authorization() Module "System.Web.Security.UrlAuthorizationModule", line 153, col 0, in OnEnter Void OnEnter(System.Object, System.EventArgs) Module "System.Web.HttpApplication+SyncEventExecutionStep", line 65, col 0, in System.Web.HttpApplication.IExecutionStep.Execute Void System.Web.HttpApplication.IExecutionStep.Execute() Module "System.Web.HttpApplication", line 21, col 0, in ExecuteStep System.Exception ExecuteStep(IExecutionStep, Boolean ByRef) 

应用程序部署10-15分钟后抛出带有exception的YSOD.App没有重新启动它只是显示YSOD。

但没有人编辑过web.config。 修改日期没有改变,内容也没有改变 – 与win合并和文件相比是相同的(部署后一个直接抛出exception)。

手动保存web.config(没有任何更改)文件或重新部署应用程序问题后,将在接下来的10-15分钟内解决。

@ EDIT1

也试过:

  • 将其部署为另一个应用服务 – 无法正常工作
  • 在本地运行它而不是在azure上工作(因此它似乎与azure app服务主机连接)。

@ EDIT2

我们在6.6.2017的日志中得到了第一个错误,它不时发生(我说一周一次。但它是测试环境,流量非常低)直到两天前(27.06.2017)。 然后它爆炸了,并且一直在发生。

@ EDIT3

我从符号服务器下载了源文件并对其进行了调试。

从方法GetStreamVersion返回的当前版本很奇怪。 上次写入时间是创建时间前10分钟。 (也许它在应用程序崩溃之前以某种方式与10-15连接?)

与当前版本进行比较的Last版本是正常的。 在上次写作之前创建。

不知道为什么修改创建时间。 我使用powershell在kudu上仔细检查了它,一切似乎都没问题(值与lastVersion中的值相同)。

当前版本:

  • CreatedTime:{6/29/2017 10:28:30 AM}
  • LastWriteTime:{6/29/2017 10:17:18 AM}

lastVersion:

  • CreatedTime:{6/28/2017 8:50:11 AM}
  • LastWriteTime:{6/29/2017 10:17:18 AM}

用kudu为web.config采取的时间:

  • CreationTime:6/28/2017 8:50:11 AM
  • LastWriteTime:6/29/2017 10:17:18 AM
  • LastAccessTime:6/28/2017 8:50:11 AM

https://github.com/Microsoft/referencesource/blob/master/System.Configuration/System/Configuration/BaseConfigurationRecord.cs#L3988

收到Azure团队的回复:

设置WEBSITE_DYNAMIC_CACHE_FCN_MODE = 1首先尝试,根据问题行为,它应该解决问题。 如果此设置不愈合,我们需要去WEBSITE_DYNAMIC_CACHE = 0

边注:

设置WEBSITE_DYNAMIC_CACHE_FCN_MODE = 1不应导致性能影响。 如果网站内容很大,设置WEBSITE_DYNAMIC_CACHE = 0可能会在初始加载期间略微影响性能。

他们仍在调查这个问题突然发生的原因。

有没有关于这个问题的解决方案的消息? 因为我添加了@Jeroen Slor所描述的所有设置,但问题仍然存在。

请确保您正在使用

 WEBSITE_DYNAMIC_CACHE = 0 

不要使用WEBSITE S _DYNAMIC_CACHE = 0,因为它不起作用。

在过去的几天里,错误已经来了,我还没有设法找出导致它的设置或行为。 至今;

  • 重新启动Web应用程序在没有配置其他部署插槽的站点上为我工作。
  • 在具有多个部署插槽的其他站点上,仅重新部署似乎有效。

我还没有尝试过任何一种Jeroen的解决方案,因为我觉得重新启动或重新部署比改变我不理解的设置更舒服。

看起来@JeroenSlor的回答也帮助了我一段时间,但是在下一次App部署之后它再次回来了。 所以提到的标志看起来像有一些安慰剂效果。

如果查看WebApp上设置的环境变量( https:// [yourwebapp] .scm.azurewebsites.net / Env.cshtml ),您将看到变量列表:

 WEBSITE_AUTH_ENABLED = False WEBSITE_COMPUTE_MODE = Dedicated WEBSITE_CURRENT_STAMPNAME = <...> WEBSITE_DYNAMIC_CACHE = 1 WEBSITE_HOME_STAMPNAME = <...> WEBSITE_HOSTNAME = <...>.azurewebsites.net WEBSITE_HTTPLOGGING_ENABLED = 0 ...and much more 

如果您将查看此列表,您会发现提到了WEBSITE_DYNAMIC_CACHE = 1

但是……请发现差异 – 这是WEBSITE_ ,而不是之前建议的WEBSITES_ 。 所以我猜标志应该是WEBSITE_DYNAMIC_CACHE_FCN_MODEWEBSITE_DYNAMIC_CACHE ,但这只是我的猜测,因为很难找到任何关于它的官方回复。

我不是在责备,只是真的想找到真正的修复。;)

根据微软支持(我们在找到这篇文章的同时提出了这个问题的门票) – 这里有一个小错误 – 它应该是网站 – 而不是网站。

如果有人仍在努力解决这个问题,我们的案例就是删除了

  

来自web.config的标记有帮助。

不知道为什么,但我怀疑在web.config中有一个位置标记会以某种方式导致op提到的GetStreamVersion方法出现问题。