2010-04-16 3 views
3

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

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

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

Однако я немного запутался о том, как справляться с этим вопросом часового пояса так как если сервер находится в Нью-Йорке и время обновления устанавливается на 2010-01-01 17:00 : 00 и клиента в Seattle проверяет сравнивает его в местное время 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 –

Смежные вопросы