Сериализация CloudBlockBlob для кеширования

Я внедряю внутреннее кэширование Azure для веб-роли Web API, которая у меня есть. Я хотел бы иметь возможность кэшировать BlobReference для определенных BLOB-объектов, которые меняются не часто. Вот код, который я использую, чтобы получить BlobReference. Вещи, которые я получаю, представляют собой zip-файлы типа CloudBlockBlob

public ICloudBlob GetBlob(string containerName, string blobName)
{
   CloudBlobContainer container = GetBlockBlobContainer(containerName);
   ICloudBlob blob = container.GetBlobReferenceFromServer(blobName);
   return blob;
}

Однако, когда я пытаюсь поместить элемент в Cache, он говорит, что CloudBlockBlob не сериализуем. Поскольку я не могу изменить этот класс для сериализации, есть ли обходной путь для этого? Если нет, каков предпочтительный метод кэширования метаданных больших двоичных объектов для больших двоичных объектов, которые не изменяются часто?

1 ответ

Решение

Скопируйте то, что вам нужно, в DTO. Как правило, нехорошо размещать сложные объекты в глобальных структурах данных appdomain. Вы никогда не знаете, какой граф объектов находится за ними и являются ли они потокобезопасными. Если классы приходят из сторонней библиотеки, вы не можете знать, что внутри. Вы должны контролировать объекты самостоятельно.

Глобальное состояние в длительных процессах является очень важным ресурсом. Если вы испортите приложение, оно может быть недоступно до тех пор, пока процесс перезапуска вручную не будет катастрофическим.

Другие вопросы по тегам