Код ошибки кэша Azure‹ERRCA0017›:SubStatus‹ES0006›

Я пытаюсь получить доступ к службе MS Azure Cache и довольно часто получаю эту ошибку:

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 есть некоторые «временные» сбои, но, возможно, я делаю что-то неправильно в своем коде?


person Alex    schedule 17.07.2014    source источник
comment
Вы решили эту проблему, так как я столкнулся с тем же..   -  person loop    schedule 23.12.2014


Ответы (1)


Вы получаете ошибку несколько раз, а затем все снова начинает работать? Если это так, это ожидаемое поведение, и ваше приложение должно иметь политику, согласно которой вы повторяете попытку несколько раз, прежде чем вернуться к постоянному хранилищу данных.

Если вы постоянно получаете сообщение об ошибке (более нескольких секунд), скорее всего, DataCacheFactory перешел в недопустимое состояние. Вы можете либо перезапустить клиентский процесс, либо обновить DataCacheFactory, как описано в этом запись в блоге.

person Mike Harder    schedule 17.07.2014