使用Windows Azure缓存与模拟器(即在本地,而不是云)时遇到问题.
我的系统配置是:
问题是:我们的服务器利用(角色内)Windows Azure缓存进行会话管理等.一旦服务器从客户端获得请求,它就开始与Windows Azure缓存通信以放置/获取一些对象(例如,会话对象).然后发生"超时"异常(Microsoft.ApplicationServer.Caching.DataCacheException),服务器无响应,在Visual Studio的输出日志中显示以下消息.
...
iisexpress.exe Error: 0 : ERROR: <DistributedCache.RoutingClient> 25cb6980-94c5-4e72- adee-cd58defff7fe:SendMsgAndWait: Request TimedOut, msgId = 77
A first chance exception of type 'Microsoft.ApplicationServer.Caching.DataCacheException' occurred in Microsoft.ApplicationServer.Caching.Client.dll
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll'
iisexpress.exe Error: 0 : The thread '<No Name>' (0x16d0) has exited with code 0 (0x0).
The thread '<No Name>' (0x1a00) has exited with code 0 (0x0).
The thread …Run Code Online (Sandbox Code Playgroud) 使用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
如果可能,存储并重用相同的DataCacheFactory对象以节省内存并优化性能."
有没有人看到任何指标或任何量化这是多么昂贵?
"MaxConnectionsToServer设置...确定打开到缓存集群的每个DataCacheFactory的chennel数量."
因此,如果MaxConnectionsToServer = 1且DataCacheFactory是您应用中的单例,那么您已经有效地将所有请求同步到您的Web服务器!
然而,有 一个 很多迹象表明DataCacheFactory应该是一个单身(即放在Application_OnStart)的.
这很关键,我无法相信它不在Microsoft文档中.DataFacheFactory在AppFabric,Azure共享缓存和Azure缓存中的处理方式是否相同?我很难相信微软以一种需要单件工厂对象的方式设计缓存.这就像要求任何使用SqlConnection的人在其应用程序中拥有单个SqlConnectionFactory对象一样.
因此,考虑到相对平均的Web应用程序(例如,每小时1,000个请求,缓存中约100个对象,平均请求访问5个缓存对象):
编辑(答案正在进行中):
(1/2).让Azure连接池处理Factory对象
(3).还在测试......
(4).仍然试图弄清楚我是否应该重新使用DataCache引用
我正在尝试使用以下代码连接到预览Azure Redis缓存.
var options = new ConfigurationOptions();
options.EndPoints.Add("myname.redis.cache.windows.net", 6379);
options.Ssl = true;
options.Password = "VeryLongKeyCopiedFromPortal";
var connection = ConnectionMultiplexer.Connect(options);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了例外
"无法连接到redis服务器;要创建断开连接的多路复用器,请禁用AbortOnConnectFail"
是什么导致这个?
我正在尝试使用Windows Azure缓存预览.
我有一个专用缓存工作者角色,一个使用以前缓存的webrole,以及一个持续更新缓存的工作者角色.
我按照Windows Azure指南中的说明操作,但仍然出现错误:
无法加载文件或程序集"Microsoft.ApplicationServer.Caching.Core,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我加倍三重1000000检查依赖,有正确的.我注意到有两组dll:我想要使用的版本1.0.0.0,以及我不想要的另一个版本101.0.0.0.我BindingRedirect在所有.config文件中添加了语句,将101个版本映射到1.0.0.0我检查了\ bin文件夹,用Jetbrains反编译了dll,它们是正确的.我开始失去耐心.为什么.NET在我放置显式路径时不采用我指定的DLL?
对于我的MVC4应用程序,在Azure中运行,我将会话存储在共存的缓存中.如Microsoft提供的本方法文档中所述.
我运行两个小实例,一切似乎都运行正常.我可以登录到应用程序,当我在应用程序中浏览时,我仍然保持登录状态.因此,会话似乎适用于两个实例.
但是,当我更新会话数据时,如下所示:
HttpContext.Current.Session["someVar"] = "new value";
Run Code Online (Sandbox Code Playgroud)
该更改似乎只对处理该特定请求的实例产生影响.现在,当我浏览应用程序时,有时我得到初始值,有时我得到更新的值.
我没有对web.config进行任何更改,因此它看起来与Nuget包添加时完全一样:
<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
<providers>
<add name="AppFabricCacheSessionStoreProvider"
type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"
cacheName="default"
useBlobMode="true"
dataCacheClientName="default" />
</providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)
在使用Azure缓存时,是否需要以其他方式处理会话,或者这是我在这里缺少的其他内容?
我正在尝试在两个Web角色实例上运行的共存缓存上使用会话状态提供程序进行Windows Azure缓存.我有一个ASP.NET MVC4项目.我按照微软的指导如何设置它,并经历了多次,但结果相同.当我发布到Azure时,我在每个页面上都有一个YSOD.
我已经浏览了我的Azure实例上的日志,发现了可能导致此问题的异常:
Event code: 3008
Event message: A configuration error has occurred.
...
Exception information:
Exception type: DataCacheException
Exception message: ErrorCode<ERRCMC0003>:SubStatus<ES0001>:Error in client configuration file.
at Microsoft.ApplicationServer.Caching.ConfigFile.ThrowException(Int32 errorCode, Exception e)
at Microsoft.ApplicationServer.Caching.ClientConfigReader.Init(String path)
at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration..cctor()
Unrecognized element 'autoDiscover'. (E:\sitesroot\0\web.config line 20)
at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, …Run Code Online (Sandbox Code Playgroud) 我意识到这可能是一个模糊的问题,而遗赠却是一个模糊的答案,但是我需要一些用于为Web应用程序缓存数据的真实示例,想法和/或最佳实践。我阅读的所有示例本质上都是技术性更高的(如何从相应的缓存存储区添加或删除缓存数据),但是我无法找到更高级的缓存策略。
例如,我的Web应用程序为每个用户提供一个收件箱/邮件功能。到目前为止,我一直在将典型的会话数据存储在缓存中。在此示例中,当用户登录时,我进入数据库并检索用户的邮件并将其存储在缓存中。我开始怀疑我是否应该一直只是在缓存中维护所有用户消息的副本,并且仅在需要时从缓存中检索它们,而不是在登录时从数据库中加载它们。我在登录时(产品目录和相关实体)还加载了一堆其他数据,并且登录开始变慢。
因此,我想向社区提出我的问题,在这种情况下,您会/建议采取什么措施?
谢谢。
optimization memcached caching web-applications azure-caching
我正在尝试在我的Windows Azure网站上运行缓存.缓存是在我的一个Worker Roles上配置的.
我用这篇文章开始:http://www.windowsazure.com/en-us/develop/net/how-to-guides/cache/
最初,由于缺少程序集错误,我无法使Azure Cache Client dll正常工作.
Could not load file or assembly 'Microsoft.WindowsAzure.ServiceRuntime, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
Could not load file or assembly 'msshrtmi, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
虽然我已经得到了这篇文章的帮助来解决这个问题:http://www.thedailyparker.com/PermaLink,guid,0be6425e-b509-4122-af01-7086ce2f811e.aspx
但接下来我遇到了SEHException,听起来像配置问题.虽然我不知道我错过了什么.例外细节:
[SEHException (0x80004005): External component has thrown an exception.]
RdGetApplicationConfigurationSetting(UInt16* , UInt16** ) +0
RoleEnvironmentGetConfigurationSettingValueW(UInt16* pszName, UInt16* pszDest, UInt32 cchDest, UInt32* …Run Code Online (Sandbox Code Playgroud) 是否值得使用Azure缓存预览从Azure Table存储缓存数据?或者表存储在大规模应用程序中足够快?
谢谢
azure-caching ×10
azure ×9
c# ×3
asp.net ×2
asp.net-mvc ×2
caching ×1
memcached ×1
optimization ×1