Sta*_*tes 7 c# azure azure-web-roles azure-caching
使用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>
Run Code Online (Sandbox Code Playgroud)
好,太棒了.我将[cluster role name]替换为webrole的名称,例如"helloworld.web".现在,当我创建DataCacheFactory或DataCache对象时:
_dataCacheFactory = new DataCacheFactory();
_defaultCache = _dataCacheFactory.GetDefaultCache();
//Or, just this line
_defaultCache = new DataCache(@"default");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
编辑
我得到了它的工作!
我在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进程的更多信息:新的完整IIS功能:与托管Web核心的差异