2011-09-23 2 views
1

J'essaye d'implémenter Utiliser le stockage local avec le stockage BLOB. Je suis passé par http://allcomputers.us/windows_azure/using-local-storage-with-blob-storage-(part-1)---using-a-local-cache---defining-and-accessing-local-storage.aspx et a factorisé ma méthode GetBlob comme ci-dessous.Windows Azure, blob non chargé à LocalResource

public Stream GetBlob(string blobAddress, string CONTAINER_NAME) 
    { 
     MemoryStream stream = null; 
     stream = CheckInLocalCache(blobAddress); 
     if (stream==null) 
     { 
      CloudBlobContainer container = Client.GetContainerReference(CONTAINER_NAME); 
      if (container != null) 
      { 
       stream = new MemoryStream(); 
       container.GetBlobReference(blobAddress).DownloadToStream(stream); 
      } 
     } 

     return stream; 
    } 

    private static MemoryStream CheckInLocalCache(string blobAddress) 
    { 
     MemoryStream localBlobStream=null; 
     LocalResource localBlobCache = RoleEnvironment.GetLocalResource("localBlobCache"); 
     if (localBlobCache != null) 
     { 
      string localCacheRootDirectory = localBlobCache.RootPath; 
      string blobName = blobAddress.Split('/')[blobAddress.Split('/').Length - 1]; 
      if (File.Exists(localBlobCache.RootPath + blobName)) 
      { 
       localBlobStream = new MemoryStream(File.ReadAllBytes(localBlobCache.RootPath + blobName)); 
      }    
     } 
     return localBlobStream; 
    } 

Dans le fichier de configuration i ajouté ce

<WebRole name="ServiceRuntimeWebsite"> 
    <LocalResources> 
     <LocalStorage name="localBlobCache" 
        cleanOnRoleRecycle="true" 
        sizeInMB="100" /> 
    </LocalResources> 
</WebRole> 

Quand je lance mon prject dans un environnement de développement, je vois le dossier "localBlobCache" est créé. Mais même après de nombreuses fois en chargeant des blobs d'azur, je n'ai jamais vraiment chargé mon stockage local. Quelqu'un peut-il dire ce qui ne va pas?

Répondre

0

Il ne semble pas que quelque chose dans le code que vous avez partagé enregistre le fichier dans le répertoire de cache. Vous voulez probablement quelque chose dans GetBlob qui enregistre le blob dans un fichier s'il n'est pas déjà là.

+0

Je devrais écrire du code pour ça ou wat? . N'est-ce pas automatiquement géré par Azur? . Si j'écris explicitement le code pour sauvegarder dans le répertoire de cache. Quelle est la nécessité de le stocker dans un cache et de récupérer via localBlobCache.RootPath. Je peux prendre n'importe quel autre répertoire et écrire un code personnalisé pour ce droit? –

+1

Windows Azure (ou la bibliothèque du client de stockage) ne contient aucun élément permettant d'enregistrer des éléments sur le disque local. Vous devez donc le créer vous-même. La raison d'utiliser une ressource LocalStorage déclarée est que cela vous donne un espace disque garanti sur la machine virtuelle. Si vous écrivez simplement dans un répertoire aléatoire sur le lecteur C :, vous pouvez ou non trouver que vous avez assez d'espace. – smarx

Questions connexes