使用 VS2012,我从 WebRole Properties Caching Tab 添加了缓存功能。其中,它在 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 的名称,例如“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
我缺少什么?
Edit
我让它工作了!
我正在 WebRole OnStart 方法中创建 DataCacheFactory,我将其移至 Global.asax 中的 Application_Start,它似乎正在工作。
桑德里诺解释了为什么会出现这种情况:https://stackoverflow.com/a/11886136/1374935
在你的问题中,你谈到将 XML 添加到网络配置,这适用于在您的 Web 角色中托管的 Web 应用程序(这就是代码在 Application_Start 方法中使用它时起作用的原因)。
但您需要知道 WebRole.cs 中的代码在不同的进程中运行(甚至在 Web 应用程序启动之前)。这就是为什么它无法从您的 web.config 读取,这就是为什么它似乎没有配置服务器的原因。
为了使该代码也可以在您的 WebRole.cs 中工作,您需要在运行该代码的进程的配置文件中添加 XML。您的代码运行在WAIISHost.exe过程,因此您需要创建一个新的配置文件WaIISHost.exe.config,在此文件中添加 XML,并将该文件的“复制到输出目录”属性更改为“始终复制”。
在此处阅读有关此 WaIISHost.exe 进程的更多信息:新的完整 IIS 功能:与托管 Web 核心的差异
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)