我有一個PHP的網絡服務器和.NET的移動應用程序。 .NET應用程序需要來自數據庫的數據,該數據庫現在由php web服務器提供。我對這種情況相當陌生,所以我不確定最佳實踐是什麼。我遇到了一些問題,我不確定如何克服它們。如何實現這個.NET客戶端和PHP服務器同步場景?
現在,我有以下設置。我運行一個PHP SOAP服務器,其中有幾個操作只是從數據庫中檢索數據。對於此Web服務,我創建了一個WSDL文件。在Visual Studio中,我使用WSDL文件爲我的項目添加了一個Web引用,併爲它生成了一些類。我簡單地稱之爲「MyWebService.GetItems();」我在.NET應用程序中獲得了一系列項目,這些項目直接來自數據庫。 接下來我還將所有這些檢索到的對象序列化到本地(永久)存儲。
我面臨一些挑戰,我不知道如何正確解決。
的想法是移動客戶端的數據一次(在一天的開始),工作之前同步,然後用全天的本地存儲,並在該年底回同步天。
目前全部數據通過SOAP下載,而不是一個子集(只需要什麼)。我如何知道應該將哪些新信息發送給客戶?只有服務器知道什麼是新的,但只有客戶端知道它已經擁有哪些數據。
我現在似乎在做雙重工作。使用SOAP傳輸的數據基本上已經是序列化對象。但目前我首先通過SOAP檢索所有對象,而.NET框架會自動將其反序列化。然後我自己再次序列化所有數據。簡單地將它下載到存儲器,然後反序列化它會更有效率。
移動設備沒有很多內存。在我的測試數據中,這不是一個真正的問題,但是可能有成千上萬的記錄,我可以想象這會成爲一個問題。目前,當我調用SOAP方法時,它將所有數據加載到內存中(作爲數組),但是如上所述,也許最好將它存儲到存儲中,並且只從存儲中檢索所需的對象。但是,我將如何存儲這個?數組將序列化爲一個大的XML(或二進制)文件,從中我無法選擇要加載的對象。我會(可能有十幾萬個)單獨的文件嗎?同樣在一天結束的時候,當我想將更改發送回服務器時,我將如何知道要發送哪些對象...因爲它們不在內存中?
我希望我的煩惱很明確,希望你能幫我弄清楚如何實現這個最好的方法。 :)
有些東西已經被修復了(就像在移動設備上使用.NET一樣,使用PHP並且有一個MySQL數據庫服務器),但其他的東西大多數情況下可以改變(如使用SOAP)。