示例#1
0
        private async Task <AcquireLeaseResult> Acquire(string category, LeaseRequest leaseRequest)
        {
            try
            {
                var blobClient = GetBlobClient(category, leaseRequest.ResourceKey);
                //create this blob
                await blobClient.UploadAsync(new MemoryStream(Encoding.UTF8.GetBytes("blob")), new BlobHttpHeaders { ContentType = "application/json" });

                var leaseClient = blobClient.GetBlobLeaseClient();
                var lease       = await leaseClient.AcquireAsync(leaseRequest.Duration);

                return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey, leaseRequest.Duration, lease.Value.LeaseId, DateTime.UtcNow), ResponseCode.OK, null));
            }
            catch (RequestFailedException e)
            {
                ResponseCode statusCode;
                //This mapping is based on references : https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes
                // https://docs.microsoft.com/en-us/rest/api/storageservices/Lease-Blob?redirectedfrom=MSDN
                switch (e.Status)
                {
                case 404:
                case 409:
                case 412: statusCode = ResponseCode.LeaseNotAvailable; break;

                default: statusCode = ResponseCode.TransientFailure; break;
                }
                return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey), statusCode, e));
            }
        }
示例#2
0
        private async Task <AcquireLeaseResult> Acquire(string category, LeaseRequest leaseRequest)
        {
            try
            {
                var blob = this.container.GetBlockBlobReference(GetBlobName(category, leaseRequest.ResourceKey));
                blob.Properties.ContentType = "application/json";
                //create this blob
                await blob.UploadTextAsync("blob");

                var leaseId = await blob.AcquireLeaseAsync(leaseRequest.Duration);

                return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey, leaseRequest.Duration, leaseId, DateTime.UtcNow), ResponseCode.OK, null));
            }
            catch (StorageException e)
            {
                ResponseCode statusCode;
                //This mapping is based on references : https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes
                // https://docs.microsoft.com/en-us/rest/api/storageservices/Lease-Blob?redirectedfrom=MSDN
                switch (e.RequestInformation.HttpStatusCode)
                {
                case 404:
                case 409:
                case 412: statusCode = ResponseCode.LeaseNotAvailable; break;

                default: statusCode = ResponseCode.TransientFailure; break;
                }
                return(new AcquireLeaseResult(new AcquiredLease(leaseRequest.ResourceKey), statusCode, e));
            }
        }