实现azure colocated缓存

时间:2012-08-09 14:08:45

标签: c# azure azure-web-roles azure-caching

使用VS2012我从WebRole属性缓存选项卡添加了缓存功能。其中,它在web.config中生成了以下XML:

  <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>

好的,太好了。我将[cluster role name]替换为webrole的名称,例如“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

我错过了什么?

修改

我得到了它的工作!

我在WebRole OnStart方法中创建了DataCacheFactory,我将它移到了Global.asax中的Application_Start,它似乎正在工作。

Sandrino解释了为什么会出现这种情况:https://stackoverflow.com/a/11886136/1374935

3 个答案:

答案 0 :(得分:6)

在您的问题中,您谈到将XML添加到 web.config ,这适用于Web角色中托管的Web应用程序(这就是为什么代码在Application_Start方法中使用时的工作原理)。

但是您需要知道WebRole.cs中的代码在不同的进程中运行(甚至在启动Web应用程序之前)。这就是为什么它无法从你的web.config读取,这就是它似乎没有配置服务器的原因。

为了使代码也能在您的WebRole.cs中运行,您需要在配置文件中为运行该代码的进程添加XML。您的代码在 WaIISHost.exe 进程中运行,因此您需要创建一个新的配置文件 WaIISHost.exe.config ,在此文件中添加XML并更改将该文件的“输出目录”属性复制到“始终复制”。

在此处详细了解此WaIISHost.exe进程:New Full IIS Capabilities: Differences from Hosted Web Core

答案 1 :(得分:1)

我得到了它的工作!

我在Web角色OnStart方法中创建了Data CacheFactory,我将它移到了Global.asax中的Application_Start,它似乎正在工作。

答案 2 :(得分:1)

是。通过各种配置,我在故障排除期间也重新安装了Azure工具。

上面提到了Web.config,但是在你的服务定义中,确保它有一行:

<Import moduleName="Caching" />

这是我的根本问题,但是一旦尝试让它发挥作用,它几乎已经改变了。此外,当我查看Web角色时,缺少缓存选项卡,这是通过重新安装Azure工具来修复的(我清理了可能有或没有帮助的旧版本)。我是通过Azure站点示例而不是上面的示例启动它的。

DataCache AgencyCache = new DataCache("AgencyDataValidation");

记得导入:

using Microsoft.ApplicationServer.Caching;