C# 应用程序引发异常,web.config已被修改,但它';不是

C# 应用程序引发异常,web.config已被修改,但它';不是,c#,azure,webforms,azure-web-app-service,C#,Azure,Webforms,Azure Web App Service,我的asp.net web表单站点在azure应用程序服务上遇到了奇怪的问题 出现异常: ConfigurationErrorsExceptionSystem.Configuration.BaseConfigurationRecord in EvaluateOne The configuration file has been changed by another program. (D:\home\site\wwwroot\web.config) ConfigurationErrorsEx

我的asp.net web表单站点在azure应用程序服务上遇到了奇怪的问题

出现异常:

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分钟后抛出YSOD,但有例外。应用程序未重新启动,只是显示YSOD

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

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

@Edit1

还审判了:

  • 将其部署为另一个应用程序服务-不工作
  • 在本地运行,而不是在服务器上运行 azure(工作正常,似乎与azure应用程序服务连接 主持人)
@Edit2

我们在2017年6月6日的日志中发现了第一个错误,直到两天前(2017年6月27日),这一错误不时发生(我说一周一次,但这是流量非常低的测试环境)。然后它就爆炸了,一直在发生

@Edit3

我从symbol server下载了源文件并对其进行了调试

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

其中,与当前版本比较的最后版本是正常的。在上次写入之前创建

不知道为什么要修改创建时间。我用powershell在kudu上仔细检查了它,一切似乎都正常(值与上一版本相同)

当前版本:

  • 创建时间:{6/29/2017 10:28:30 AM}
  • LastWriteTime:{6/29/2017 10:17:18 AM}
最新版本:

  • CreatedTime:{6/28/2017 8:50:11 AM}
  • LastWriteTime:{6/29/2017 10:17:18 AM}
使用kudu for web.config所用的时间:

  • 创作时间:2017年6月28日上午8:50:11
  • 上次写作时间:2017年6月29日上午10:17:18
  • 最近访问时间:2017年6月28日上午8:50:11

收到Azure团队的回复:

设置WEBSITE\u DYNAMIC\u CACHE\u FCN\u MODE=1首先尝试,根据问题行为,它应该解决问题。如果此设置无法修复,我们需要转到网站\u DYNAMIC\u CACHE=0

旁注:

将网站\u动态\u缓存\u FCN\u模式设置为1不应导致 性能影响。将网站\u动态\u缓存设置为0可能会导致 如果网站内容大小为 巨大的


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

在过去几天里,我遇到了一个又一个错误,我还没有设法找出是什么设置或行为导致了它。到目前为止

  • 在没有配置其他部署插槽的站点上重新启动Web应用对我来说很有效
  • 在具有多个部署槽的不同站点上,似乎只有重新部署可以工作

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

在一段时间内,@JeroenSlor answer似乎也帮了我一把,但在下一次应用程序部署之后,它又回来了。所以提到的旗帜看起来有一些安慰剂效应

如果查看WebApp()上设置的环境变量,您将看到一个变量列表,如下所示:

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\u AUTH\u ENABLED=False
网站\计算\模式=专用
网站\当前\邮票名称=
网站\u动态\u缓存=1
网站\主页\邮票名称=
网站\主机名=.azurewebsites.net
网站\u HTTPLOGGING\u已启用=0
……还有更多
如果您查看此列表,您会发现其中提到了
网站\u DYNAMIC\u CACHE=1

但是。。请指出区别-它是
网站
,而不是前面建议的
网站
。 所以我猜标志应该是
WEBSITE\u DYNAMIC\u CACHE\u FCN\u MODE
WEBSITE\u DYNAMIC\u CACHE
,但这只是我的猜测,因为很难找到任何官方回应


我不是在责怪,只是想找到真正的解决办法

根据Microsoft支持部门的说法(我们在查找此帖子的同时提出了一个问题)-这里有一个小错误-应该是网站-而不是网站。

请确保您正在使用

WEBSITE_DYNAMIC_CACHE = 0

请勿使用网站S\u DYNAMIC\u CACHE=0,因为它将不起作用。

如果有人仍在为该问题而挣扎,请在我们的案例中删除

<location> 

来自web.config的标记帮助


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

能否尝试将其托管在另一个设备中,并检查是否是服务器设备问题?很高兴知道你是否正在按代码编辑de app config,如果是这样,请共享代码。我们有完全相同的问题。这是昨天开始的,我们仍然没有解决办法。100%确定我们不做任何web.config更改。错误是即使在重新启动后仍会继续返回。这看起来像是Azure的一个全球性问题?@Ferus7也尝试过:-将其部署为另一个应用程序服务-不工作-在Azure上本地运行它(工作时,它似乎与Azure应用程序服务主机连接)。@JeroenSlor 10-15分钟后,您是否有同样的问题?在我们的例子中,重写web.config和重新启动都有帮助,但只有10-15分钟。@Pawel yes错误会在一段时间后返回:(我们设置了这些标志,我们不再面临这些问题。无论如何,我们不能保证这些标志会有帮助,因为在我们应用之前,这个错误很少发生。所以azure似乎也修复了他们这方面的问题。你说得对。这是网站\u动态\u缓存。这正是我设置的。