Azure Web 角色引发的 web.config 中无法识别的元素"自动发现"



我正在尝试将会话状态提供商用于Windows Azure缓存,以在两个Web角色的两个实例上运行的共同位置的缓存。我有一个ASP.NET MVC4项目。我遵循了Microsofts指南,介绍了如何进行设置,并多次浏览了它,但结果相同。当我发布到Azure时,我在每个页面上都会得到一个YSOD。

我已经浏览了我的Azure实例上的日志,发现可能引起这一点的例外:

Event code: 3008 
Event message: A configuration error has occurred. 
...
Exception information: 
    Exception type: DataCacheException 
    Exception message: ErrorCode<ERRCMC0003>:SubStatus<ES0001>:Error in client configuration file.
   at Microsoft.ApplicationServer.Caching.ConfigFile.ThrowException(Int32 errorCode, Exception e)
   at Microsoft.ApplicationServer.Caching.ClientConfigReader.Init(String path)
   at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration..cctor()
Unrecognized element 'autoDiscover'. (E:sitesrootweb.config line 20)
   at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
   at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at Microsoft.ApplicationServer.Caching.ClientConfigReader.Init(String path)

我意识到这与我的web.config和本节有关:

<dataCacheClients> 
  <tracing sinkType="DiagnosticSink" traceLevel="Error" /> 
  <dataCacheClient name="default"> 
    <autoDiscover isEnabled="true"/> 
  </dataCacheClient> 
</dataCacheClients>

,但该部分直接从Microsoft指南中获取。我还尝试过卸载并重新安装Windowsazure.caching Nuget-Package,它在Web.config中添加了适当的条目,但看起来也完全相同。

我已经在MSDN上找到了有关外观相同问题的讨论,但是我启用了一个新的Azure Web角色,因此我看不出它应该与GAC和SDK的旧版本有关在这种情况下,还是我错过了什么?

浏览已部署网站的bin-folder,在我的Azure实例上,我看到我的Microsoft.ApplicationServer.Caching.Client.dllMicrosoft.ApplicationServer.Caching.Core.dll的文件版本是1.0.4621.0。当我安装WindowsAzure.Caching Nuget包装时,这与我项目中引用的文件相同。这是要使用的合适文件吗?

调试15小时后,对此的任何输入都将不胜感激。

更新:

当我将其发布到新的Web角色的两个实例中时,我实际上已经开始工作了。我将开始进行该部署,看看是否可以发现任何区别。

更新2:

区别在于我的项目使用Microsoft.ApplicationServer.Caching.Client.dllMicrosoft.ApplicationServer.Caching.Core.dll1.0.4621.0版本,而Microsoft项目使用1.0.4655.0。因此,实际上我正在使用SDK的旧版本。由于某种原因,我的项目在发布时坚持上传这些文件,即使我删除了这些文件,但是如果这解决了问题,我会得到一个完整的答案。

尝试升级最新的 azure sdk 1.7 SP1 1.8 。Azure SDK 1.8本周刚刚发布。根据MSDN论坛,autoDiscover仅在 Azure SDK 1.7.1 中支持基于角色的Caching。

Azure SDK 1.6 2011年11月)汇编版本:1.0.4617.0
Azure SDK 1.7 2012年6月)汇编版本:1.0.4621.0
Azure SDK 1.7.1 2012年6月SP1 )汇编版本:1.0.4655.0
Azure SDK 1.8 2012年10月)汇编版本:1.0.4797.0

最新更新