Windows Azure, большой двоичный объект не загружен в LocalResource

Я пытаюсь реализовать использование локального хранилища с хранилищем BLOB. Я прошел через http://allcomputers.us/windows_azure/using-local-storage-with-blob-storage-(part-1)---using-a-local-cache---defining-and-accessing-local-storage.aspx и реорганизовал мой метод GetBlob, как показано ниже.

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;
    }

В файле конфигурации я добавил это

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

Когда я запускаю свой проект в среде разработки, я вижу, что создается папка localBlobCache. Но даже после многократной загрузки BLOB-объектов из лазурного режима он так и не загрузился в мое локальное хранилище. Кто-нибудь может сказать, что не так?


person Kuntady Nithesh    schedule 23.09.2011    source источник


Ответы (1)


Не похоже, что что-то в коде, которым вы поделились, сохраняет файл в каталог кеша. Возможно, вам понадобится что-то в GetBlob, которое сохранит большой двоичный объект в файл, если его там еще нет.

person user94559    schedule 23.09.2011
comment
Я должен написать код для этого или что? . Разве это не автоматически обрабатывается лазурью? . Если я явно пишу код для сохранения в каталоге кеша. Зачем хранить его в кеше и получать через localBlobCache.RootPath. Я могу взять любой другой каталог и написать для этого собственный код, верно? - person Kuntady Nithesh; 23.09.2011
comment
В Windows Azure (или в клиентскую библиотеку хранилища) нет ничего встроенного, что сохраняло бы данные на локальный диск, так что да, вам придется создать это самостоятельно. Причина использования объявленного ресурса LocalStorage заключается в том, что это дает вам гарантированное дисковое пространство на виртуальной машине. Если вы просто пишете в случайный каталог на диске C :, вы можете или не можете обнаружить, что у вас достаточно места. - person user94559; 24.09.2011