2016-03-10 83 views
0

我想創建以下項目:託管在Azure上天青與API的WPF和JavaScript

  1. 服務器應用程序 - 它通過實體框架連接到DATABSE並給出了和API誰想要連接的人(但賬戶存儲在SQL數據庫)
  2. WPF應用程序 - 它消耗服務器的方法,對象等
  3. 的Web應用程序(PHP &的JavaScript) - 也消耗服務器的方法和對象等

重要事項:我只有蔚藍色的學生訂閱,我想堅持下去 - 除非有很強的論證,否則購買其他任何東西都是不可能的。

我認爲要做到這一點,我必須創建REST Web API,因爲我沒有其他選擇連接到服務器而不是通過HTTPWebRequest(因爲我想爲WPF nad Web應用程序使用相同的API)。

我的問題是:確實有更好的解決方案嗎?

我想我可以創建不同的API的桌面客戶端比網絡應用程序,但我不知道如何做到這一點。你會如此善良地以另一種方式展示我嗎?

爲什麼我不想要這個解決方案? 原因很簡單。對於大型數據庫和較慢的互聯網連接,需要很長時間才能在幾秒鐘內下載完整的數據。據我所知,在REST中沒有延遲加載,因此我的WPF應用程序負責下載數據庫的線程將凍結很長一段時間。

如果我的問題太寬泛,請在您提出國旗之前發表評論。 此外,任何有關我的項目設計的提示都非常感謝。

+0

REST中沒有延遲加載,通常情況下,您會以限速(漏桶算法)形式在後續請求使用偏移量和資源限制。這將大量資源請求分解爲多個http請求,這些請求允許您的服務器暫停並有機會調整/平衡負載。 – jleach

回答

1

桌面和網絡的不同API:這可以很容易地完成。假設你有一個類庫來包含你的業務邏輯(域的東西)。創建一個使用它的web api項目,然後單獨創建另一個web api項目,並使用核心模型。當你部署時,分別部署到不同的域/子域(我不確定你是否需要更多的Azure資源,但考慮api.desktop.myapp.comapi.web.myapp.com ...沒有真正的技術原因,爲什麼你不能這樣做雖然對於建築的原因,我會避免它(它真的來接近如果不是絕對的重複代碼)

同樣的API,用於桌面和Web:你說,你以爲你必須這樣做對桌面和網絡來說是不同的,特別是因爲服務器上的資源使用情況,我不同意這裏,並認爲你應該在你的API中實現一些標準化的速率限制,通常這是通過只允許X個資源返回單次呼叫如果最初的請求要求超過X限制,則爲偏移量/ ne xtID由API返回,並且客戶端提交一個新的請求,指出offset/nextID。這意味着你有來自客戶端的後續調用來獲得它需要的所有東西,但是讓你的服務器有機會以更小的塊來處理它(例如,檢查速率限制,調節,負載平衡等)。請參閱漏桶算法以獲得我更喜歡的實現方式:我自己:https://en.wikipedia.org/wiki/Leaky_bucket

+2

如果你想使用相同的API,用於桌面和Web和應用程序只是消耗SQL資源 - Azure的移動應用提供了連接到SQL Azure的後端共同的OData v3的資源 - 這兩個項目可以在Azure中實現免費( Azure應用服務+ SQL Azure都有免費的定價計劃)。 Azure移動應用程序還爲UWP桌面應用程序提供客戶端SDK - Web/JavaScript,C#/ .NET,以及 - 如果您進入移動世界以及適用於iOS,Android,Xamarin,Windows Phone和Apache Cordova的桌面和Web插件。 –

+0

謝謝jdl134679我會按照你的建議爲WPF和Web創建API。 @AdrianHall我會試試看,謝謝! – MaLiN2223