Я пытаюсь использовать поставщика состояния сеанса для кэширования 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, поэтому я не вижу, что она должна быть связана с GAC и старой версией SDK в этом случае, или я Я что-то пропустил?
Просматривая папку bin развернутого сайта на моем экземпляре Azure, я вижу, что файловая версия моих Microsoft.ApplicationServer.Caching.Client.dll
и Microsoft.ApplicationServer.Caching.Core.dll
равна 1.0.4621.0
. Это те же файлы, на которые ссылается мой проект, когда я устанавливаю пакет WindowsAzure.Caching
Nuget. Это правильные файлы для использования?
После 15 часов отладки любой вклад в это будет высоко оценен.
Обновление:
На самом деле я заставил этот проект работать, когда я публикую его на два экземпляра новой веб-роли. Я начну проходить это развертывание и посмотрю, смогу ли я обнаружить какие-либо различия.
Обновление 2:
Разница в том, что мой проект использует версию 1.0.4621.0
из Microsoft.ApplicationServer.Caching.Client.dll
и Microsoft.ApplicationServer.Caching.Core.dll
, а проект Microsoft использует 1.0.4655.0
. Так что вполне может быть, что я использую старую версию SDK. По какой-то причине мой проект настаивает на загрузке этих файлов при публикации, даже если я их удаляю, но я вернусь с полным ответом, если это решит проблему.