我正在尝试在运行在 Web 角色的两个实例上的同位缓存上使用用于 Windows Azure 缓存的会话状态提供程序。我有一个 ASP.NET MVC4 项目。我按照Microsoft 的指南进行了设置,并多次查看,但结果相同。当我发布到 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:\sitesroot\0\web.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 包,它将正确的条目添加到 web.config,但它看起来也完全相同。
我在 MSDN 上找到了这个关于看起来是同一个问题的讨论,但是我启动了一个新的 Azure Web 角色,所以在这种情况下我看不出它应该与 GAC 和 SDK 的旧版本有关,或者我错过了什么?
查看已部署站点的 bin 文件夹,在我的 Azure 实例上,我看到我的Microsoft.ApplicationServer.Caching.Client.dll
和文件版本Microsoft.ApplicationServer.Caching.Core.dll
是1.0.4621.0
. WindowsAzure.Caching
这与我安装Nuget 包时在我的项目中引用的文件相同。这是要使用的正确文件吗?
经过 15 小时的调试,我们将非常感谢您对此的任何意见。
更新:
当我将它发布到一个新的 Web 角色的两个实例时,我实际上已经让这个项目工作了。我将开始进行该部署,看看是否能发现任何差异。
更新 2:
不同之处在于我的项目使用的是 and 的版本1.0.4621.0
,Microsoft.ApplicationServer.Caching.Client.dll
而Microsoft.ApplicationServer.Caching.Core.dll
微软的项目使用的是1.0.4655.0
. 所以实际上可能是我使用的是旧版本的 SDK。出于某种原因,我的项目坚持在我发布时上传这些文件,即使我删除了它们,但如果这解决了问题,我会得到一个完整的答案。