实现 Azure 共存缓存

7

我将使用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>

好的,太棒了。我用Web角色的名称替换了[集群角色名称],比如“helloworld.web”。现在,当我创建DataCacheFactory或DataCache对象时:

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

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

I get the following error:

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://dev59.com/-WfWa4cB1Zd3GeqPdhd9#11886136

3个回答

6
在您的问题中,您谈到将XML添加到< strong>web.config 中,这适用于托管在Web角色中的Web应用程序(这就是为什么在Application_Start方法中使用代码时它能正常工作的原因)。
但是需要知道的是,WebRole.cs中的代码在不同的进程中运行(甚至在启动Web应用程序之前),这就是为什么它无法读取您的web.config,并且看起来似乎没有配置服务器的原因。
为了让该代码也能在WebRole.cs中正常工作,您需要将XML添加到运行该代码的进程的配置文件中。您的代码在< strong> WaIISHost.exe 进程中运行,因此您需要创建一个新的配置文件< strong> WaIISHost.exe.config ,在此文件中添加XML,并将该文件的“复制到输出目录”属性更改为“始终复制”。
在此处阅读有关WaIISHost.exe进程的更多信息:New Full IIS Capabilities: Differences from Hosted Web Core

1
是的。逐步检查各种配置,我在故障排除期间还重新安装了Azure工具。
上面提到了Web.config,在您的服务定义中,请确保它有一行:
<Import moduleName="Caching" />

这是我的根本问题,但在尝试使其工作时几乎改变了所有内容。此外,当我查看Web角色时,缓存选项卡不见了,通过重新安装Azure工具进行修复(清理旧工具可能有所帮助)。我是通过Azure网站示例来启动它的,而不是上面的方法。
DataCache AgencyCache = new DataCache("AgencyDataValidation");

记得导入:

using Microsoft.ApplicationServer.Caching;

1

我搞定了!

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


我想知道为什么,以及在ASP.NET MVC应用程序中初始化某些操作(例如创建Azure表、创建缓存连接等)的代码最佳放置位置在哪里。 - States
1
我遇到了完全相同的问题,但是是从MVC控制器初始化缓存。我在Application_start中没有做任何事情。有什么想法吗?这是一个类似的问题,我在启动时漏掉了什么吗? - Steve Newton
@SteveNewton:我也有同样的问题。你最后解决了吗? - Dave New

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接