Исключение при вызове CacheDiagnostics.ConfigureDiagnostics из рабочей роли с помощью Caching 2.1

Я установил Windows Azure Caching 2.1.0.0 от Nuget и настроил коллекцию диагностики клиентской библиотеки для рабочей роли, используя Azure SDK 2.1, следуя инструкциям в этом ответе SO.

К сожалению, когда я запускаю приложение в среде разработки, я получаю следующее исключение - я не понимаю, почему оно жалуется на файл конфигурации. Я искал эту ошибку, но не нашел ничего подходящего для моего случая.

Microsoft.ApplicationServer.Caching.DataCacheException was caught
ErrorCode=9004
HelpLink=http://go.microsoft.com/fwlink/?LinkId=164049
HResult=-2146233088
Message=ErrorCode<ERRCMS0004>:SubStatus<ES0001>:Configuration file
(file name:"{0}") not found.
Source=Microsoft.ApplicationServer.Caching.Core
SubStatus=-1
StackTrace:
   at Microsoft.ApplicationServer.Caching.ConfigFile.
     ThrowException(Int32 errorCode)
   at Microsoft.ApplicationServer.Caching.AzureCommon.
     MemcacheUtility.GetRoleConfigPath()
   at Microsoft.ApplicationServer.Caching.AzureCommon.
     CacheDiagnostics.ConfigureMemcacheShimCrashDumps
     (DiagnosticMonitorConfiguration diagnosticMonitorConfig)
   at Microsoft.ApplicationServer.Caching.AzureCommon.
      CacheDiagnostics.ConfigureDiagnostics
      (DiagnosticMonitorConfiguration diagnosticMonitorConfig, 
      String diagnosticsStorageAccountConfigurationSettingName)
   at Microsoft.ApplicationServer.Caching.AzureCommon.
      CacheDiagnostics.ConfigureDiagnostics(
      DiagnosticMonitorConfiguration diagnosticMonitorConfig)

2 ответа

Решение

Я осмотрел сборку Microsoft.ApplicationServer.Caching.AzureCommon с ILSpy, и я обнаружил функцию, в которой CacheDiagnostics.ConfigureDiagnostics ищет web.config или же *.dll.config для роли - в среде Azure он проверяет оба файла, а если обнаруживает эмулятор вычислений, он проверяет только web.config, ИМХО, это ошибка в библиотеке (вероятно, не так важная, поскольку, похоже, кэширование используется в основном из веб-ролей).

Затем я скопировал app.config для рабочей роли я переименовал ее в web.config и установите его для копирования на выходе проекта - так я смог вызвать CacheDiagnostics.ConfigureDiagnostics без исключений.

Для меня проблема была в том, что Web.config файл копировался в папку bin/Release, пока CacheDiagnostics.ConfigureDiagnostics искал это под approot папка. Итак, я вручную вставил туда файл, чтобы проверить его локально. В облаке файл конфигурации копируется в правильную директорию.

Другие вопросы по тегам