我在一个托管服务,具有部署在Web角色的情况下,Windows Azure的缓存工作。 缓存是在生产,但在计算模拟器,我们禁用它启用,因为我们常常遇到的减速和异常与缓存模拟器。 特别是,在计算模拟器中,我们不加载缓存模块中的csdef
并在运行时,我们发现,如果缓存是通过创建启用DataCacheFactory
和捕获抛出的特定异常时,在客户端库配置指示的作用,在未找到csdef
。
这正常工作,直到Windows Azure的缓存2.0 - 当我们升级到Windows Azure缓存2.1(和Azure的SDK 2.1)的行为改变:
- 我们没有对异常
DataCacheFactory
构造; 当我们尝试实例的DataCache
从DataCacheFactory
的作用似乎挂起,并在3分钟后它除了具有以下不同(完整的文本,可以发现返回这里 ):
Microsoft.ApplicationServer.Caching.DataCacheException was unhandled by user code Message=ErrorCode<ERRCA0017>:SubStatus<ES0006>:There is a temporary failure. Please retry later. (<snip>). Additional Information : The client was trying to communicate with the server: net.tcp://WebRole:24233. InnerException: System.Net.Sockets.SocketException Message=No such host is known
请不,这不是下面做题重复:
- 不能让Azure的缓存工作。 “有一个临时故障。 请稍后再试“。
- 异常而使用Windows Azure的缓存:没有这样的主机是已知的
- Azure的缓存-升级失败后的SDK 2.1和2.1缓存
以来
- 我敢肯定,我使用Azure的SDK 2.1(我在调试,库版本是正确的检查);
- 当我禁用目的缓存角色我的问题只发生。
使用下面描述的步骤SO回答 ,并与ILSpy的帮助下,我已经能够明白为什么发生异常:在Windows Azure中缓存2.1时,在客户端配置中指定的角色没有发现它被认为是一个地址和执行继续,而在旧版本,它抛出一个异常(我抓到了解高速缓存未启用)。
相关的日志信息是:
WaWorkerHost.exe Information: 0 : INFORMATION:
<DistributedCache.CacheFactory.1> TryAutoDiscoverServersWithinDeployment
for Instance 'WebRole' failed to connect as RoleName type with exception
System.Reflection.TargetInvocationException: Exception has been thrown by
the target of an invocation. --->
Microsoft.ApplicationServer.Caching.DataCacheException:
ErrorCode<UnspecifiedErrorCode>:SubStatus<ES0001>:The role WebService
was not found in the current deployment.
at Microsoft.ApplicationServer.Caching.AzureClientHelper.RoleUtility.
GetCacheRoleIPList(String roleName, String portIdentifier)
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments,
Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,
Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
BindingFlags invokeAttr, Binder binder, Object[] parameters,
CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.
AutoDiscoverServersWithinDeployment()
at Microsoft.ApplicationServer.Caching.DataCacheFactory.
TryAutoDiscoverServersWithinDeployment()
Assuming it as EndPoint.
和
WaWorkerHost.exe Warning: 0 : WARNING: <DistributedCache.SocketClientChannel.1>
Request 1 to host net.tcp://webrolw:24233/ failed
Status=ChannelOpenFailed[System.Net.Sockets.SocketException (0x80004005):
No such host is known
要解决此问题,您可以:
- analize的
DataCacheFactory
刚刚创建并查看是否在Servers
属性存在其中的地址是一样的缓存角色名称的任何项目-一个标志,表示角色有没有缓存配置; - 在托管服务下的重试次数的调试配置
CacheReadyRetryPolicy
的财产DataCacheFactory
(这是异常导致前3分钟的延迟),如果抛出异常假设缓存不可用。
文章来源: Missing cache role behavior of Windows Azure Caching 2.1 in compute emulator