【问题标题】:Implement azure colocated caching实施 azure colocated 缓存
【发布时间】:2012-08-06 18:57:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    在您谈到将 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

    【讨论】:

      【解决方案2】:

      我让它工作了!

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

      【讨论】:

      • 我想知道为什么,以及在哪里放置初始化某些操作的代码的最佳位置,例如为 ASP.NET MVC 应用程序创建 azure 表、创建缓存连接等。
      • 我有完全相同的问题,但从 MVC 控制器启动缓存。我没有在 Appplication_start 中做任何事情。任何想法,这是一个类似的问题,我在启动时遗漏了一些东西吗?
      • @SteveNewton:我也有同样的问题。你有想过吗?
      【解决方案3】:

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

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

      <Import moduleName="Caching" />
      

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

      DataCache AgencyCache = new DataCache("AgencyDataValidation");
      

      记得导入:

      using Microsoft.ApplicationServer.Caching;
      

      【讨论】:

        猜你喜欢
        • 2023-02-13
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2017-11-25
        • 1970-01-01
        相关资源
        最近更新 更多