实现azure colocated缓存

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

    <!--  -->   

好,太棒了。 我将[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:SubStatus: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

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

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

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

在此处阅读有关此WaIISHost.exe进程的更多信息: 新的完整IISfunction:与托管Web核心的差异

我得到了它的工作!

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

是。 步骤虽然各种配置和我在我的故障排除过程中也重新安装了Azure工具。

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

  

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

 DataCache AgencyCache = new DataCache("AgencyDataValidation"); 

记得导入:

 using Microsoft.ApplicationServer.Caching;