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>

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

4

3 回答 3

6

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

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

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

在此处阅读有关此 WaIISHost.exe 进程的更多信息:新的完整 IIS 功能:与托管 Web 核心的区别

于 2012-08-09T14:52:36.500 回答
1

我让它工作了!

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

于 2012-08-09T14:39:12.907 回答
1

是的。逐步完成各种配置,我在故障排除期间也重新安装了 Azure 工具。

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

<Import moduleName="Caching" />

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

DataCache AgencyCache = new DataCache("AgencyDataValidation");

记得导入:

using Microsoft.ApplicationServer.Caching;
于 2014-06-10T22:27:51.777 回答