Как контролировать, когда удаленный файл iCal (.ics) был обновлен и календарь должен синхронизироваться? - PullRequest
2 голосов
/ 24 марта 2011

Я работаю над системой asp.net 4 (веб-формы), которая управляет событиями и рассылает электронные письма об этом клиентам.

Я создал страницу, которая динамически создает файл .ics на основе данных из нашей базы данных, которые клиенты могут загрузить, чтобы добавить события в Outlook и iCalendar. Этот файл отправляется через Response, поэтому я не храню файл на сервере. Поскольку я могу предоставить адрес webcal: // для этого файла, он также может быть синхронизирован всякий раз, когда кто-то изменяет настройки для события в нашей системе.

Пример .ics: webcal: //www.abc.com/get-ics.aspx? Id = 123

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

Итак, мой актуальный вопрос: как Outlook и другие приложения-календари узнают, когда обновлен ics-файл и ему нужно получить обновленный файл? Мне нужно управлять этим, чтобы генерировать новый файл только при наличии фактического обновления, а не при каждом отдельном запросе. Основная проблема в том, что мы не хотим хранить актуальные файлы на сервере.

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Запустите службу, которая опрашивает файл и проверяет заголовки изменений HTTP.Если есть изменения, загрузите его заново.Точной реализации я не знаю.Но это должно быть отправной точкой.

0 голосов
/ 24 марта 2011
> How does Outlook and other calendar applications know 
> when an ics-file has been updated and needs to fetch the updated file?

каждый каландерентри имеет уникальный идентификатор, последнюю модификацию и ассоциируется с одним или несколькими пользователями.

  • Клиент может попросить дать мне все изменения с 2002-12-24 для userid = 123
  • или сервер, который генерирует один ical-файл на пользователя, дает этому файлу дату модификации самой новой записи

Обратите внимание, что это не обрабатывает записи, которые удалены из календаря

...