private PersistenceResponseHolder <E> PersistenceResponseFormat(StorageResponseHolder result) { if (result.IsSuccess) { if (result.Content != null) { return new PersistenceResponseHolder <E>() { StatusCode = result.StatusCode, Content = result.Content, IsSuccess = true, Entity = mTransform.PersistenceEntitySerializer.Deserializer(result.Content), VersionId = result.VersionId } } ; else { return new PersistenceResponseHolder <E>() { StatusCode = result.StatusCode, IsSuccess = true, VersionId = result.VersionId } }; } else { return new PersistenceResponseHolder <E>() { StatusCode = result.IsTimeout ? 504 : result.StatusCode, IsSuccess = false, IsTimeout = result.IsTimeout } }; }
/// <summary> /// This is wrapper class that provides generic exception handling support /// and retrieves the standard metadata for each request. /// </summary> /// <param name="rq">The request.</param> /// <param name="rs">The response.</param> /// <param name="action">The async action task.</param> /// <returns>Returns a task with the response.</returns> protected async Task <StorageResponseHolder> CallCloudBlockBlob(StorageRequestHolder rq , Func <StorageRequestHolder, StorageResponseHolder, bool, Task> action) { int start = StatisticsInternal.ActiveIncrement(); var rs = new StorageResponseHolder(); try { var refEntityDirectory = mEntityContainer.GetDirectoryReference(rq.Directory); rq.Blob = refEntityDirectory.GetBlockBlobReference(rq.SafeKey); bool exists = await rq.Blob.ExistsAsync(rq.CancelSet); if (exists) { MetadataGet(rq.Blob, rq); exists ^= rq.IsDeleted; } await action(rq, rs, exists); } catch (StorageException sex) { rs.Ex = sex; rs.IsSuccess = false; rs.StatusCode = sex.RequestInformation.HttpStatusCode; rs.IsTimeout = rs.StatusCode == 500 || rs.StatusCode == 503; } catch (TaskCanceledException tcex) { rs.Ex = tcex; rs.IsTimeout = true; rs.IsSuccess = false; rs.StatusCode = 502; } catch (Exception ex) { rs.Ex = ex; rs.IsSuccess = false; rs.StatusCode = 500; } finally { if (!rs.IsSuccess) { StatisticsInternal.ErrorIncrement(); } StatisticsInternal.ActiveDecrement(start); } return(rs); }