none
Azure云服务中使用Retry Policy的问题 RRS feed

  • 问题

  • 在Azure中创建容器时,为了避免409的错误,我使用了自定义的Retry Policy,测试是使用本地的Azure模拟环境,连接的Blob是Azure的,测试时没有问题,但是将服务部署到云服务上时,测试发现Retry Policy中的ShouldRetry方法中的lastException转化为StorageException后,其中的RequestInformation.ExtendedErrorInformation对象是null,这样会导致空引用,但是不判断RequestInformation.ExtendedErrorInformation属性中的ErrorCode的话,总感觉不是很保险,请问有什么解决办法吗?

    ShouldRetry代码如下,其中注释的代码是为了判断409异常的详细信息的:

            public bool ShouldRetry(int currentRetryCount, int statusCode, Exception lastException, out TimeSpan retryInterval, OperationContext operationContext)
            {
                retryInterval = defaultRetryInterval;
                if (currentRetryCount >= maxRetryAttemps)
                {
                    return false;
                }

                //Since we're only interested in 409 status code, let's not retry any other operation.
                if ((HttpStatusCode)statusCode != HttpStatusCode.Conflict)
                {
                    return false;
                }

                if (lastException.GetType() != typeof(StorageException))
                {
                    return false;
                }

                return true;
                //var storageException = (StorageException)lastException;
                //string errorCode = storageException.RequestInformation.ExtendedErrorInformation.ErrorCode;
                //if (errorCode.Equals(StorageErrorCodeStrings.ContainerBeingDeleted))
                //{
                //    return true;
                //}
                //return false;
            }

    2014年10月24日 2:53

全部回复