Пример #1
0
 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);
        }