我有大约6个设置文件(xml或json),我想在Azure中存储但在我的Windows客户端应用程序中使用。我计划将它们存储在blob存储中并使用以下代码下载它们:
var myWebClient = new WebClient();
myWebClient.DownloadFile(Address, file.FullName);
设置文件不会经常更改。如何在本地缓存文件,以免每次都下载?
有更好的方法吗?我应该使用的其他一些Azure服务?
答案 0 :(得分:2)
设置文件不会经常更改。如何在本地缓存文件,以免每次都下载?
根据我的理解,您可以使用blob文件的 ETag 属性,该属性可以用作标识符,并且每次对blob文件执行更新操作时都会更新。
在Windows客户端应用程序中加载设置文件之前,您可以从本地检查ETag并与服务器端的相关值进行比较,如果ETag不匹配,您可以将设置下载到本地续订的一面,然后加载较新的设置文件。
由于您使用的是Windows客户端应用程序,因此您可以将容器公共访问级别设置为仅限Blob的公共读取访问权限,或者使用对容器的有限权限生成SAS令牌,然后您可以使用{ {3}}并按照以下代码从blob服务中检索ETag
属性,如下所示:
//access container with public access level to blobs
//var container = new CloudBlobContainer(new Uri("https://{storage-name}.blob.core.windows.net/{container-name}"));
//access container with SAS token
var container = new CloudBlobContainer(new Uri("https://{storage-name}.blob.core.windows.net/{container-name}?{SAS-token}"));
CloudBlob blockBlob = container.GetBlobReference("setting.json");
blockBlob.FetchAttributes();
string etag=blockBlob.Properties.ETag;
使用WebClient
下载设置文件时,您可以在本地设置文件的文件名中设置 Etag 值(例如{filename}-{etag}.json
)。
此外,您可以利用Azure Storage Client Library for .NET来管理存储资源。此外,您还可以利用ContentMD5
属性,但它有一些限制,有关详细信息,请参阅Azure Storage Explorer。