Сериализация 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. Вы никогда не знаете, какой граф объектов находится за ними и являются ли они потокобезопасными. Если классы приходят из сторонней библиотеки, вы не можете знать, что внутри. Вы должны контролировать объекты самостоятельно.
Глобальное состояние в длительных процессах является очень важным ресурсом. Если вы испортите приложение, оно может быть недоступно до тех пор, пока процесс перезапуска вручную не будет катастрофическим.