6

temizlik, böyle yönetilen bir ortamdaAzure Web Uygulaması Sıcaklık dosya benim Azure Web Uygulaması Web API uygulaması birinde sorumluluğunu

string path = Path.GetTempFileName(); 
    // do some writing on this file. then read 
    var fileStream = File.OpenRead(path); 
    // then returning this stream as a HttpResponseMessage response 

Benim sorum Get yönteminde bu kodu kullanarak geçici dosyaları, oluşturma (VM'de değil), Bu geçici dosyaları kendim temizlemem gerekir mi? Azure'un bu geçici dosyaları temizlememesi gerekiyor mu?

cevap

7

Bu dosyalar, yalnızca siteniz yeniden başlatıldığında temizlenir. Temizlemene yoksa tükendi böylece

sitenizin Serbest veya Paylaşılan modunda çalışıyorsa, bu sadece, geçici dosyalar için 300MB alır. Siteniz Basic veya Standart modda ise

ardından önemli ölçüde daha fazla boşluk olduğundan (200GB etrafında!). Yani muhtemelen limite girmeden temizlik yapamazsınız. Sonunda, siteniz yeniden başlatılacak (örneğin platform yükseltme sırasında), böylece işler temizlenecektir.

Bu konuyla ilgili bazı ek ayrıntı için this page bakınız. numunenin ardından

+0

Ben geçici dosyalar için endişelenmenize gerek yok. Ben David @ ebbo muyum? –

+0

Evet, bu güvenli olmalıdır. –

0

, lacivert hem Yolu ve BOLB geçici dosya kaydetmek nasıl gösterilmektedir.

Doküman buradadır: Burada https://code.msdn.microsoft.com/How-to-store-temp-files-in-d33bbb10
Kod tıklama: parçası altında https://github.com/Azure-Samples/storage-blob-dotnet-store-temp-files/archive/master.zip

BOLB kod çekirdek mantığı: Her sabah 'yeniden başlatma' zamanlama o zaman, yani

private long TotalLimitSizeOfTempFiles = 100 * 1024 * 1024; 

private async Task SaveTempFile(string fileName, long contentLenght, Stream inputStream) 
{ 
    try 
    { 
     await container.CreateIfNotExistsAsync(); 

     CloudBlockBlob tempFileBlob = container.GetBlockBlobReference(fileName); 

     tempFileBlob.DeleteIfExists(); 

     await CleanStorageIfReachLimit(contentLenght); 

     tempFileBlob.UploadFromStream(inputStream); 
    } 
    catch (Exception ex) 
    { 
     if (ex.InnerException != null) 
     { 
      throw ex.InnerException; 
     } 
     else 
     { 
      throw ex; 
     } 
    } 
} 

private async Task CleanStorageIfReachLimit(long newFileLength) 
{ 
    List<CloudBlob> blobs = container.ListBlobs() 
     .OfType<CloudBlob>() 
     .OrderBy(m => m.Properties.LastModified) 
     .ToList(); 

    long totalSize = blobs.Sum(m => m.Properties.Length); 

    long realLimetSize = TotalLimitSizeOfTempFiles - newFileLength; 

    foreach (CloudBlob item in blobs) 
    { 
     if (totalSize <= realLimetSize) 
     { 
      break; 
     } 

     await item.DeleteIfExistsAsync(); 
     totalSize -= item.Properties.Length; 
    } 
}