你沒有提到你正在使用在客戶端什麼樣的技術,如果你需要訪問客戶端或者僅僅是數據上的數據庫 - 但無論有幾種方法可以做到這一點。
Azure移動應用程序有一個快速入門,它將實現Azure SQL < - > SQL Lite(移動)數據庫同步框架(服務器端的表控制器)。這使您可以使用移動端的庫來使用本地數據庫來獲取其數據,並且當您知道您處於聯機狀態時,您可以與服務器進行同步。這非常複雜,可能不僅僅是您正在尋找的緩存。
我已經用於緩存其他兩個策略 - 一個HTML/JavaScript的應用基礎(的PhoneGap /科爾多瓦),另一個用於在iOS和Android Xamarin C#應用程序。我假設如果它是一個標準的Windows桌面應用程序,你知道如何堅持數據,所以你可以使用任何類型的緩存/文件系統/ DB你喜歡。
的JavaScript/HTML - 使用HTML5 localStorage的功能是存儲該Web服務器的JSON輸出調用你正在做。這真的很容易,然後抽象,你的應用程序之前正在做一個Ajax調用服務器來獲取一些數據,而不是移動到一個「liveorcache」類,它可以決定是否去服務器或只使用本地存儲。下面localStorage的代碼片段保存/載入JSON:
$scope.saveFixtures = function() {
localStorage["fixtures"] = JSON.stringify($scope.fixtures);
};
$scope.loadFixtures = function() {
if (localStorage["fixtures"] != undefined) {
$scope.fixtures = JSON.parse(localStorage["fixtures"]);
}
};
如果你在寫Xamarin您的應用程序,你可以做同樣的事情,但使用PCL庫 - 我用「PCLStorage」,這適用於Android和iOS。同樣的策略,在我的代碼中,我只是將JSON數據寫入具有合適文件名的文件中,但通常將該對象包裝在另一個包含緩存寫入日期/時間的對象中。然後,將對象序列化到文件中 - 如下所示。
public class CacheProvider
{
public static async Task<CacheModel> ReadCache<T>(string filename)
{
IFolder rootFolder = FileSystem.Current.LocalStorage;
IFolder cache = await rootFolder.CreateFolderAsync("sportenzaCache", CreationCollisionOption.OpenIfExists);
try
{
IFile file = await cache.GetFileAsync(filename);
var data = await file.ReadAllTextAsync();
return JsonConvert.DeserializeObject<T>(data) as CacheModel;
}
catch(FileNotFoundException ex)
{
return null;
}
}
public static async void WriteCache<T>(string filename, CacheModel data)
{
IFolder rootFolder = FileSystem.Current.LocalStorage;
IFolder cache = await rootFolder.CreateFolderAsync("sportenzaCache", CreationCollisionOption.OpenIfExists);
IFile file = await cache.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
if (file != null)
{
data.CacheCreated = DateTime.Now;
string json = JsonConvert.SerializeObject(data);
await file.WriteAllTextAsync(json);
}
}
public static async void DeleteCache(string filename)
{
IFolder rootFolder = FileSystem.Current.LocalStorage;
IFolder cache = await rootFolder.CreateFolderAsync("sportenzaCache", CreationCollisionOption.OpenIfExists);
IFile file = await cache.GetFileAsync(filename);
if (file != null)
await file.DeleteAsync();
}
}
我使用WPF使用Visual Basic。 我見過Azure數據同步的東西,但我擔心的是它圍繞着「移動」這個術語引發了很多,並提到了像iPhone,Windows Phone和Android這樣的平臺。 該功能是否可以與我的桌面應用程序一起運行? –
嗨威廉 - 仍然不確定你想用什麼技術來實際存儲和訪問客戶端的數據。「移動應用程序」方法基本上是一個模板,它爲您提供了一個工作的起點,針對偶爾斷開連接的應用程序的人員 - 通常情況下,這是移動應用程序,但不一定是。客戶端代碼使用SQLLite,它也可以在桌面平臺上運行。但是,您可以選擇仍使用JSON序列化數據進行緩存,或者使用其他數據庫進行自己的實現,例如... –
謝謝@Russel Young。 我絕對期待/希望用Sqlite來實現。我想我會繼續前進,並使用完全有效的Azure數據同步,而不是簡單地使用JSON緩存它(有點是因爲我幾乎沒有任何想法如何完成,找不到任何資源來學習,也不知道它的目的是什麼將盡可能節省系統資源) 如果我發現問題或使用其他實現的充分理由,我可能會決定從Azure數據同步中回滾並使用後一個建議。 –