2012-08-09 34 views
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> 

好的,太好了。我用webrole的名称替换了[cluster role name],比如说“helloworld.web”。现在,当我创建DataCacheFactory或数据高速缓存对象:

_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

回答

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

我得到它的工作!

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

+0

我想知道为什么,虽然,这里将是把初始化某些操作,如创建蔚蓝表的代码的最佳场所,创建缓存连接等为ASP.NET MVC应用程序。 – States 2012-08-09 14:39:21

+0

请参阅:http://stackoverflow.com/a/11886136/1374935 – States 2012-08-09 14:59:47

+1

我有完全相同的问题,但从MVC控制器启动缓存。我在Appplication_start中没有做任何事情。任何想法,这是一个类似的问题,我在启动失去了一些东西? – 2013-10-22 21:44:20

1

是。尽管各种配置,我也做了重新安装Azure工具,以及在我的故障排除期间。

存在被上述Web.config文件,但在你的服务定义,确保它有一个路线:

<Import moduleName="Caching" /> 

这是我的根的问题,但后来曾经改变了几乎所有试图让它工作。另外,当我查看网络角色时,缓存选项卡丢失了,通过重新安装Azure工具修复了这个问题(我清理了可能帮助或可能没有帮助的旧的工具)。我通过Azure站点示例启动它,而不是上述内容。

DataCache AgencyCache = new DataCache("AgencyDataValidation"); 

记住导入:

using Microsoft.ApplicationServer.Caching;