应用程序抛出web.config被修改的异常,但它不是

时间:2017-06-29 08:48:12

标签: c# azure webforms azure-web-app-service

我在我的asp.net网络表单网站上遇到了天蓝色应用服务的奇怪问题。

得到例外:

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)

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

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

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

@ EDIT1

也试过:

  • 将其部署为另一个应用服务 - 无法正常工作
  • 不在本地运行它 azure(工作所以它似乎与azure app服务有关 主机)。

@ EDIT2

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

@ EDIT3

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

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

与最新版本比较的最新版本是正常的。在上次写作之前创建。

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

CURRENTVERSION:

  • 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 for 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

7 个答案:

答案 0 :(得分:13)

收到Azure团队的回复:

  

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

旁注:

  

设置WEBSITE_DYNAMIC_CACHE_FCN_MODE = 1不应该导致   绩效影响。设置WEBSITE_DYNAMIC_CACHE = 0可能会略有不同   如果网站内容大小为,则在初始加载期间影响性能   巨大。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

请确保您正在使用

WEBSITE_DYNAMIC_CACHE = 0

请勿使用网站 S _DYNAMIC_CACHE = 0,因为它不起作用。

答案 3 :(得分:1)

在过去的几天里,错误已经来了,我还没有设法解决导致它的设置或行为。到目前为止;

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

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

答案 4 :(得分:1)

看起来@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,但这只是我的猜测,因为很难找到任何关于它的官方回复。

我不是在责备,只是真的想找到真正的解决办法。;)

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

<location> 
来自web.config帮助的

标记。

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