2011-02-04 19 views
6

Bu koda sahibim:Azure depolama hatası: "Belirtilen blob zaten var", ancak değil!

  CloudBlob blob = _container.GetBlobReference(relativefilePath); 
     blob.Properties.ContentType = contentType; 
     blob.UploadFromStream(fileContent); 

Büyük bir dosyayı (150 MB) geliştirme deposuna yüklediğimde ve şu istisnayı aldım:

Microsoft.WindowsAzure.StorageClient.StorageClientException kullanıcı tarafından işlenemedi code
Mesaj = Belirtilen blob zaten mevcut.
Kaynak = Microsoft.WindowsAzure.StorageClient

Ancak bu doğru değil, dosya mevcut değil. Aslında, bunun neden sorun olduğunu bilmiyorum, her denediğimde, mevcut bir bloğun üzerine yazabilirim. En şaşırtıcı olanı, istisna VS olduğunda, "Düzenlemeyi etkinleştir" i seçerim, yürütme imlecini (sarı ok) kodun 2. satırına taşıdım, yürütürüm ... ve sonra BT ÇALIŞIYORUM !!

Özel durumu yalnızca büyük dosyalarla alıyorum ve nedenini anlamıyorum.

Bu istisna ayrıntısıdır:

Microsoft.WindowsAzure.StorageClient.StorageClientException was unhandled by user code 
    Message=The specified blob already exists. 
    Source=Microsoft.WindowsAzure.StorageClient 
    StackTrace: 
     at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result() 
     at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait() 
     at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImpl(Func`1 impl) 
     at Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFromStream(Stream source, BlobRequestOptions options) 
     at Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFromStream(Stream source) 
     at AzureBlobOperations.AzureFileContainerOperations.PutFile(String relativefilePath, Stream fileContent, String contentType, Boolean createIfNotExists) in C:\Users\valeriano.tortola\Documents\Visual Studio 2010\Projects\TestWithBlobs\AzureBlobOperations\AzureFileOperations.cs:line 61 
     at TestWithBlobs.Web.Controllers.HomeController.PostFile(HttpPostedFileBase fileUpload) in C:\Users\valeriano.tortola\Documents\Visual Studio 2010\Projects\TestWithBlobs\TestWithBlobs.Web\Controllers\HomeController.cs:line 31 
     at lambda_method(Closure , ControllerBase , Object[]) 
     at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
     at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    InnerException: System.Net.WebException 
     Message=The remote server returned an error: (409) Conflict. 
     Source=System 
     StackTrace: 
      at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
      at Microsoft.WindowsAzure.StorageClient.EventHelper.ProcessWebResponse(WebRequest req, IAsyncResult asyncResult, EventHandler`1 handler, Object sender) 
     InnerException: 

cevap

10

Bu gelişme depolama ile bilinen bir sorundur:

Bu

istisna detaydır. Bu, blokları (blob'u oluşturan) yüklemek için başlatılan birden fazla iş parçacığı olduğunda gerçekleşir. Temel olarak, gelişme deposu, SQL Server'ın veri deposu olarak kullanılmasını sağlamaktır. Şimdi yaptığı ilk şey blob bilgilerini saklayan masaya giriş yapıyor. Birden çok iş parçacığı varsa, bu iş parçacıklarının tümü aynı işlemi yapmaya çalışacaktır. İlk iş parçacığı başarılı olduktan sonra, sonraki iş parçacıkları bu özel durumun yükseltilmesine neden olur.

o olacak gerçek şeyin içinde bir şey olmayacak böylece
+0

sayesinde, öyle değil mi? – vtortola

+0

Bu doğru. Bulutta bu olmayacak çünkü bir blob "Commit Block List" işlemini açıkça başlattığınız zamana kadar işlenmiyor. –

İlgili konular