Реализовать совместное кэширование Azure

Используя VS2012, я добавил функцию кэширования на вкладке «Кэширование свойств WebRole». Среди прочего, он сгенерировал следующий XML в web.config:

  <dataCacheClients>   
     <tracing sinkType="DiagnosticSink" traceLevel="Error" />
     <dataCacheClient name="default">
         <autoDiscover isEnabled="true"  identifier="[cluster role name]"/>
         <!-- <localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" /> -->
     </dataCacheClient> 
    </dataCacheClients>

Хорошо, отлично. Я заменил [имя роли кластера] на имя веб-роли, скажем, «helloworld.web». Теперь, когда я создаю объект DataCacheFactory или DataCache:

  _dataCacheFactory = new DataCacheFactory();
    _defaultCache = _dataCacheFactory.GetDefaultCache();

    //Or, just this line
    _defaultCache = new DataCache(@"default");

Я получаю следующую ошибку:

Microsoft.ApplicationServer.Caching.DataCacheException was unhandled
  HelpLink=http://go.microsoft.com/fwlink/?LinkId=164049
  HResult=-2146233088
  Message=ErrorCode<ERRCA0021>:SubStatus<ES0001>:Server collection cannot be empty.
  Source=Microsoft.ApplicationServer.Caching.Client
  ErrorCode=21
  SubStatus=-1

Some notes: 
IDE: VS2012,
Framework: 4.0
AzureSDK: June2012
Local dev machine

Что мне не хватает?

Изменить

Я заставил его работать!

Я создавал DataCacheFactory в методе WebRole OnStart, я переместил его в Application_Start в Global.asax, и, похоже, он работает.

Сандрино объясняет, почему это так: https://stackoverflow.com/a/11886136/1374935


person States    schedule 09.08.2012    source источник


Ответы (3)


В своем вопросе вы говорите о добавлении XML в web.config, это работает для веб-приложения, размещенного в вашей веб-роли (поэтому код работает при его использовании в методе Application_Start).

Но вам нужно знать, что код в WebRole.cs выполняется в другом процессе (еще до запуска в веб-приложении). Вот почему он не может прочитать ваш web.config, и именно поэтому кажется, что сервер не настроен.

Чтобы этот код также работал из вашего WebRole.cs, вам нужно добавить XML в файл конфигурации для процесса, выполняющего этот код. Ваш код выполняется в процессе WaIISHost.exe, поэтому вам потребуется создать новый файл конфигурации WaIISHost.exe.config, добавить XML в этот файл и изменить Скопируйте в свойство выходного каталога для этого файла значение «Копировать всегда».

Подробнее об этом процессе WaIISHost.exe читайте здесь: Новые полные возможности IIS: отличия от Hosted Web Core

person Sandrino Di Mattia    schedule 09.08.2012

Я заставил его работать!

Я создавал DataCacheFactory в методе WebRole OnStart, я переместил его в Application_Start в Global.asax, и, похоже, он работает.

person States    schedule 09.08.2012
comment
Я хотел бы знать, почему, и где было бы лучше всего поместить код, который инициализирует определенные операции, такие как создание лазурных таблиц, создание подключений к кешу и т. д. для приложения ASP.NET MVC. - person States; 09.08.2012
comment
У меня точно такая же проблема, но запуск кеша из контроллера MVC. Я ничего не делал в Appplication_start. Любые идеи, это аналогичная проблема, и я что-то упускаю при запуске? - person Steve Newton; 23.10.2013
comment
@SteveNewton: у меня та же проблема. Вы когда-нибудь догадывались об этом? - person Dave New; 10.06.2014

да. Выполните различные настройки, и я также переустановил инструменты Azure во время устранения неполадок.

Существует упомянутый выше Web.config, но в определении службы убедитесь, что в нем есть строка:

<Import moduleName="Caching" />

Это была моя основная проблема, но затем я изменил почти все, пытаясь заставить ее работать. Кроме того, когда я посмотрел на веб-роль, вкладка «Кэширование» отсутствовала, что было исправлено путем переустановки инструментов Azure (я удалил старые, которые могли помочь или не помочь). Я инициировал его с помощью примеров сайта Azure, а не того, что указано выше.

DataCache AgencyCache = new DataCache("AgencyDataValidation");

Не забываем импортировать:

using Microsoft.ApplicationServer.Caching;
person Steve Newton    schedule 10.06.2014