Насколько надежен DateTime.UtcNow в приложениях Silverlight? - PullRequest
3 голосов
/ 16 апреля 2010

У меня есть приложение silverlight , пользователи которого будут работать в различных часовых поясах .

Эти приложения загружают свои данные с сервера при запуске, затем кэш в IsolatedStorage .

Когда я изменяю данные на сервере, я хочу изменить " время последнего обновления ", чтобы все клиенты Silverlight загружали самые новые данные в следующий раз время, когда они проверяют эту дату.

Однако меня немного смущает вопрос о том, как обрабатывать проблему с часовым поясом, поскольку если * сервер 1020 * находится в Нью-Йорк и время обновления установлено на 2010-01-01 17: 00: 00 и клиент в Сиэтл проверяет сравнение с его местным временем 2010-01-01 14:00 : 00 не обновляется и будет предоставлять старые данные еще три часа.

Мое решение состоит в том, чтобы всегда отправлять время обновления в UTC время , а не со временем на сервере, а затем заставить приложение Silverlight проверять с помощью DateTime.UtcNow .

Это так просто, как кажется, или их проблемы с этим, например что часовые пояса не установлены правильно на компьютерах и, следовательно, SilverlightApp не сообщает правильное время UTC. Кто-нибудь из опыта может сказать, насколько вероятно, что использование DateTime.UtcNow, как это для обновления кэша, будет работать во всех случаях?

Если DateTime.UtcNow не является надежным, я просто буду использовать увеличенное «DataVersion» integer , но есть другие сценарии, в которых отключение синхронизации часового пояса сделает его полезным для полностью понять, как решить эту проблему в приложениях Silverlight.

1 Ответ

2 голосов
/ 16 апреля 2010

DateTime.UtcNow так же надежен, как часы в клиентской системе. Таким образом, вопрос полностью независим от Silverlight или .NET, вопрос в том, насколько вы доверяете системным часам на клиентских машинах?

Вам необходимо взвесить риск того, что пользователь машины мог неправильно установить время на своей машине, потому что он не правильно установил часовой пояс. Этот риск носит исключительно человеческий характер.

Использование инкрементного номера версии имеет только один недостаток, вам нужно сначала получить текущее значение, прежде чем вы сможете установить новое. Если это не проблема, то воспользуйтесь этим и устраните FUD, который у вас может быть вокруг часовых поясов.

...