Azure缓存ErrorCode <errca0017>:SubStatus <es0006> </es0006> </errca0017>

时间:2014-07-17 09:12:38

标签: c# .net caching azure azure-caching

我正在尝试访问MS Azure缓存服务,而且我经常遇到此错误:

Microsoft.ApplicationServer.Caching.DataCacheException: ErrorCode<ERRCA0017>:SubStatus<ES0006>:There is a temporary failure. Please retry later. (One or more specified cache servers are unavailable, which could be caused by busy network or servers. For on-premises cache clusters, also verify the following conditions. Ensure that security permission has been granted for this client account, and check that the AppFabric Caching Service is allowed through the firewall on all cache hosts. Also the MaxBufferSize on the server must be greater than or equal to the serialized object size sent from the client.). Additional Information : The client was trying to communicate with the server: net.tcp://remoto.cache.windows.net: line 23233.
   at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ErrStatus errStatus, Guid trackingId, Exception responseException, Byte[][] payload, EndpointID destination)
   at Microsoft.ApplicationServer.Caching.SocketClientProtocol.Get(String key, ref DataCacheItemVersion version, ref TimeSpan timeout, ref ErrStatus err, String region, IMonitoringListener listener)
   at Microsoft.ApplicationServer.Caching.DataCache.InternalGet(String key, ref DataCacheItemVersion version, String region, IMonitoringListener listener)
   at Microsoft.ApplicationServer.Caching.DataCache.<>c__DisplayClass53.<Get>b__52()
   at Infrastructure.Azure.Cache.AzureCacheServiceClient.<>c__DisplayClass6`1.<Get>b__5() in AzureCacheServiceClient.cs: line 88
   at Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.RetryPolicy.ExecuteAction(Func`1 func)

当我试图访问缓存中的某个对象时会发生这样的事情:

public T Get<T>(string key)
{
    retryPolicy.ExecuteAction(() =>(T) (_cache.Get(key)));
}

这是我的初始化代码:

var cacheFactory = new DataCacheFactory();
_cache = cacheFactory.GetDefaultCache();

var retryStrategy = new FixedInterval(15, TimeSpan.FromSeconds(2));
_retryPolicy = new RetryPolicy<CustomCacheTransientErrorDetectionStrategy>(retryStrategy);

和app.config:

<configSections>
    <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
    <section name="cacheDiagnostics" type="Microsoft.ApplicationServer.Caching.AzureCommon.DiagnosticsConfigurationSection, Microsoft.ApplicationServer.Caching.AzureCommon" allowLocation="true" allowDefinition="Everywhere" />
</configSections>

<dataCacheClients>
    <dataCacheClient channelOpenTimeout="1000" requestTimeout="45000" name="default">
      <autoDiscover isEnabled="true" identifier="[some.host.name]" />

      <securityProperties mode="Message" sslEnabled="true">
        <messageSecurity authorizationInfo="***" />
      </securityProperties>
    </dataCacheClient>
</dataCacheClients>

当Azure健康状态(https://azure.microsoft.com/en-us/status/)表示当时一切正常时,它至少发生过三次。 正如异常消息所说 - 在MS方面有一些'临时'失败仍然可能我的代码中有错误吗?

1 个答案:

答案 0 :(得分:1)

你得到错误几次,然后事情又开始了吗?如果是这样,这是预期的行为,您的应用程序应该有一个策略,您可以在重新执行数据存储之前重试一些次。

如果你一直得到错误(超过几秒钟),那么DataCacheFactory可能已经进入了糟糕的状态。您可以重新启动客户端进程,也可以按照此blog post中的说明刷新DataCacheFactory。