如何控制何时更新远程iCal(.ics)文件并使日历同步?

问题描述:

我正在开发一个管理事件并向客户发送关于这些事件的电子邮件的asp.net 4(web表单)系统。如何控制何时更新远程iCal(.ics)文件并使日历同步?

我创建了一个基于我们数据库中的数据动态创建.ics文件的页面,客户可以下载这些页面以将事件添加到Outlook和iCalendar。这个文件是通过Response发送的,所以我实际上并没有将文件存储在服务器上。由于我可以为此文件提供一个webcal://地址,因此只要有人在系统中更改事件的设置,也可以同步该地址。

实施例的.ics:WebCal中://www.abc.com/get-ics.aspx ID = 123

然而,由于我们的客户提供动态生成的文件同步,这迫使我们的服务器生成的文件每次他们的日历应用程序想要同步。而且由于这将每小时产生几十万个请求,服务器将会受到相当多的处罚。

所以我的实际问题是:Outlook和其他日历应用程序如何知道ics文件何时更新并需要获取更新的文件?我需要对此进行管理,以便在实际更新时生成新文件,而不是每次请求都生成新文件。主要问题是我们不希望将实际文件存储在服务器上。

启动轮询文件并检查HTTP更改标头的服务。如果有更改,请重新下载它。精确实施我不知道。但这应该是一个起点。

> How does Outlook and other calendar applications know 
> when an ics-file has been updated and needs to fetch the updated file? 

每个calenderentry都有一个独特的最后修改,并与一个或多个用户分开。

  • 客户端可以问给我所有的变化,因为对于2002-12-24用户id = 123
  • 或生成每个用户一个iCal档案给该文件的最新条目的时间modificationdate服务器

请注意,这并不处理从日历中删除的条目

+0

是的,这实际上工作,但我需要在数据库中添加一个表,其中包含有关用户上次更新时间和下载新文件时存储的信息。 此外,如果我没有提供文件给用户,他们会得到一个错误,该文件在更新时不是有效的ics文件。 lastClientUpdate = DateTime.Parse(this.Context.Request.Headers [“If-Modified-Since”])将始终返回客户端上次请求的时间 因此(lastClientUpdate> myEvent.LastModified)将始终触发更新,因为lastClientUpdate总是会比LastModified大。 – russinkungen 2011-03-24 13:56:37