2012-06-11 36 views
5

我們公司在美國和加拿大部分地區的每個災難性事件中都有人員。例如,他們在事件發生後立即在卡特里娜肆虐。斷開應用程序開發的方法

我們正在構建的應用程序,以提高他們在這可能是ASP.NET或WPF領域的工作,斷開的要求使我們相信這將是一個WPF應用程序。我們的員工需要能夠創造他們的工作,提供所有的保險和測量數據,並將數據保存在數據庫中,無論互聯網是否可用。

我們正試圖讓周圍我們頭上的問題是,當災難性事件我們的人民需要能夠使用我們的新的應用程序,即使互聯網是不可用的。 (他們在卡特里娜下線了3天)

是否有其他人必須解決像這樣的需求和他們如何在小型設備上實現功能的建議,同時保存數據,就好像他們仍然連接到後端服務和數據庫?我們還必須將安全性納入其中,並且將它們輸入的數據加載到連接的數據庫中沒有問題。

我們的長期目標是要還提供了該應用程序爲Android和iPad平板電腦設備以及筆記本電腦。我們最初對ASP.NET的期望是讓它立即應用於平板電腦環境。在他們的舊應用程序中,他們運行本地服務器,在平板電腦上運行遠程連接並通過終端服務器運行應用程序。不漂亮。不漂亮。

我覺得這是一個嚴重的問題,是不是主觀的,所以希望這不會被刪除。

我們在服務器端當前的架構是實體框架與存儲庫模式,WCF服務來滿足CRUD請求返回複合數據傳輸對象,並且由客戶使用代理。

我有興趣聽到其他開發者的意見和這個設計難題。

附加信息加入到討論

很多很好的信息提供!我必須確定地看一下Microsoft Sync。對於斷開連接的數據庫,我只會在初始數據庫中放置列表表(枚舉)。如果需要,我們將爲每個我們正在幫助的客戶添加工作,如果需要,我們將其稱爲幹書。 (儘管我希望互聯網在我們清理和乾燥家園的時候回來)。這些表格會在我們擁有穩定的鏈接後重新回到主機。在卡特里娜的情況下,我們的辦公室也失去了互聯網連接,這意味着辦公室在幾天內也沒有提供通信救濟。

昨天晚上,我意識到,我們的客戶代理的關鍵是一切工作!客戶端仍然不知道它處於聯機或脫機狀態,並將該同步過程留在該庫中。我們正在發現我們今天討論的數據量有多少。我也想清楚地表明,ASP.NET是一個類似的產品,但是一個胖客戶端(實際上是帶有XAML的WPF)最終可能會成爲我們的最終狀態。

現在 - 用於多個更新。斷開連接的工作將由一個特許經營單位去個別住宅。實際上,我們的總部辦公室會派發特定的特許經營權給特定的事件。所以我們減少了多人更新記錄的可能性(如果有的話)。原因在於他們爲每項工作(人員的家庭/辦公室/業務)創建記錄,並且只有一個專營權會處理它。當然,這也意味着,如果他們在創建工作的設備(記錄誰,地點,條件,保險公司等)也是唯一知道該工作的設備的日子裏斷開連接的話。但那可以與之共存。事實上,我們可能有能力同步集線器上的特許經營設備。

我期待收到有關您如何實施斷開連接的環境的其他故事。

謝謝!在新技術

目光從微軟

我是針對看看從2012年的TechEd視頻,我想我可能有一個答案。談話是使用ASP.NET和MVC4以及2個庫來實現斷開連接的行爲。起初我認爲它會很棒,但是當它繼續時,它讓我很擔心。

首先使用javascript後端來支持斷開連接的I/O不會產生信心。作爲編譯器人員(以及編寫兩種解釋型語言的人),我真的不喜歡擁有一個依賴於解釋性JavaScript的關鍵業務模型。並在此腳本!它可能是我,但它只是讓我不寒而慄。

然後,他們展示了他們的「偉大的」(???)編程模型,讓您的ViewModel只存在爲javascript。我不關心一個應用程序(asp.net和javascript),可能是,也可能是(因爲缺乏智能感知)寫在記事本中。

對於任何asp愛好者來說,沒有冒犯的意思,但是一個寫得很好的C#程序在語法和類型檢查方面給了我比對希望和祈禱寫的東西更強的軟件信心,即類名字空間沒有任何方式的交叉檢查。我已經看到了太多的調試時間,尋找一個以一個巨大的命名空間結尾的錯誤,這個錯誤以它的名字進行了轉置。我的想法超越了我的團隊中的其他高級開發人員,我們都對此技術達成共識。

但我們繼續看。 (我覺得這是不是一個問題變得更加日記的):)

+0

是否有一個原因,這必須是一個asp.net應用程序,而不是一個獨立的,可以定期輪詢活動,並與主數據集在某處進行惰性同步? – devshorts

+0

這個關鍵是使用類似Web服務的東西。您將使用各種技術來支持您可能需要運行此應用程序的許多設備,但有一點是不變的,即設備和服務器之間的通信網關,它將成爲您的Web服務。每個客戶可以擁有一個本地數據庫,如sql lite。該應用程序將使用一些標準的同步技術來輪詢更改。但是,每個設備都會從上次同步日期和更改後獲取Web服務的「最新」更改,或者在您的Web服務中使用各種Web方法添加相關更改 – Jeremy

+1

如何存儲數據。 Sql Server? –

回答

2

看起來像Microsoft同步一個很好的例子框架

http://msdn.microsoft.com/en-us/sync/bb736753.aspx

全面的同步平臺,使合作 以及支持任何數據類型,任何數據存儲,任何傳輸協議和任何網絡拓撲的應用程序,服務和設備的離線訪問。

+0

我閱讀了基本文檔。同步是通過網絡服務器,你不需要打開端口1433? – Paparazzi

+0

您可以使用SQL Server端口1433或WCF(80,443或您在WCF配置中指定的任何內容)。同步框架對於傳輸介質是非常不可知的。 –

1

我經常發現,構建一個適合我的特定需求的輕量級框架比使用現有的框架更有利於我。但是,在做出決定之前,應始終查看可用的內容並權衡利弊。

我沒有使用微軟同步框架,但它聽起來像是一個很好的先研究。如果你有Sql Server Standard(或Express版本以外的其他版本),那麼複製也可能是一個選項。

如果您想開發自己的本土解決方案,那麼一定要在需要保持同步的任何表上放置最新更新和添加日期的字段。它不會「聽起來」,就像你的場景會被併發問題所困(即如果人A和B同時修改一個字段,誰獲勝?)。如果是這種情況,那麼開發自己的輕量級解決方案將非常簡單。正如Jeremy所指出的那樣,你需要一種方法來獲得變化。除了使用Web服務之外,您還可以在某些方面使用與Web服務類似的WCF。但是我的個人偏見是通過互聯網遠程訪問SQL服務器。該解決方案的缺點是增加了安全問題,而優勢在於減少了開發開銷(即現在更快/更容易開發,隨着時間的推移維護更少)。另外,直接的SQL解決方案也假定這是一個內部應用程序......您負責所有開發工作,而不是與需要訪問您的數據並且不允許以這種方式訪問​​它的第三方合作。

1

不是一個完整的答案,但太多的評論。

我有兩個應用程序同步一種方式和其他兩種方式。

我做一個單向同步客戶端斷開連接的操作。在服務器完整的SQL Server和客戶端精簡版上。 TimeStamp是查找需要同步的任何行的官員。我也不會複製整個數據庫,因爲一些最大的表是非必不可少的。常用的是用戶標記他們想要同步的記錄。

如果同步做了Jakub需要的很好的+1。對我而言,我無法根據大小和安全性同步整個MSSQL。

有另一個小的應用程序同步雙向,但在這種情況下,它有區域和更新只在區域內。所以一個區域只能同步他們的數據,而在斷開模式下他們只能添加新的記錄。更新現有記錄必須在連接模式下執行。這是可以治理的。在這種情況下,主客戶端使用MSSQL,使用XML。

沒有消息給你,但原始同步的難點在於兩方可能已經添加或修改了相同的記錄。

+1

Microsoft Sync Framework不會僅同步整個數據庫。您只能同步表中的某些表和某些記錄。它也可以幫助你管理衝突。 –

+0

@JakubKonecki我會再次看看Sync Framework。我已經給你+1了。 – Paparazzi