2010-04-16 50 views
3

我有一個silverlight應用程序,其中用戶將運行在各個時區Silverlight應用程序中的DateTime.UtcNow的可靠性如何?

這些應用程序在啓動時從服務器加載它們的數據,然後緩存它在IsolatedStorage

當我更改了服務器上的數據,我希望能夠改變「最後更新時間」,讓所有Silverlight客戶端下載最新的數據在下次檢查此日期時間。

不過,我有點困惑,如何處理時區的問題,因爲如果服務器紐約和更新時間設定爲2010-01-01 17:00 :00客戶端西雅圖檢查比較它的當地時間2010-01-01 14:00:00它不會更新,並將繼續提供三個小時的舊數據。

我的解決辦法是,始終UTC時間更新時間,不與服務器上的時間,然後讓Silverlight應用程序檢查DateTime.UtcNow

這聽起來很簡單,還是他們的問題,例如:計算機上的時區未正確設置,因此SilverlightApp不會報告正確的UTC時間。 任何人都可以從經驗中說,使用DateTime.UtcNow這樣的緩存刷新的可能性有多大?

如果DateTime.UtcNow是不可靠的,我只需要使用一個增加「DataVersion」 整數但也有其他方案中獲得的時區sychronization下來會變得有用徹底瞭解如何解決這個在Silverlight應用程序中。

回答

2

DateTime.UtcNow與客戶端系統上的時鐘一樣可靠。所以這個問題完全獨立於Silverlight或.NET,問題是您相信客戶機上的系統時鐘有多少?

您需要權衡機器用戶可能由於未正確設置時區而錯誤地在其機器上設置時間的風險。這種風險完全是人爲的。

使用遞增版本號只有一個缺點,您需要先檢索當前值,然後才能設置新版本號。如果這不是問題,那麼去那個,並消除你可能有時區周圍的FUD。

+0

對,第二種方法聽起來更加確定,也許同時讓silverlight客戶端將當地時間發送回服務器並生成關於多少關閉和多少的報告會很有趣。看來你也可以通過這個獲得時區信息:System.TimeZoneInfo.Local – 2010-04-16 12:26:55