. net中的双向可更新iCal文件



我一直在尝试在。net中创建一个可以与其他设备同步的iCal日历。我一直在使用DDay。从我的数据对象生成iCal事件,到目前为止一切正常。在Outlook中,我订阅了日历(Add calendar »从Internet指向生成ics文件的URL:

Response.Clear();
Response.ContentType = "text/calendar";
Response.AddHeader("Content-Disposition", "inline; filename="Calendar.ics"");
Response.Write( GenerateCalendar() );
Response.End();

事件被正确导入到日历中;然而,在我试用过的所有日历软件中,我都无法更新或删除事件。这并不是说在接收删除通知时出现了错误;很简单,所有客户端都将日历识别为只读。

我的想法是,通过提供url,我将能够有Outlook或谷歌日历联系我的服务器,以便删除一个事件。是我的整个想法都错了,还是我只是错过了正确的属性?(或者,可能是我错误地导入了日历,或者像上面的代码那样错误地分发了日历?)

上面的GenerateCalendar生成的日历,可能看起来像这样:

BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:-//My Company//My App//EN
URL:http://localhost/test/
X-WR-CALNAME:Test
BEGIN:VEVENT
DTEND:20110831T100100
DTSTAMP:20111028T091109
DTSTART:20110831T090100
SEQUENCE:0
SUMMARY:Test
UID:1
URL:http://localhost/test/?id=1
END:VEVENT
END:VCALENDAR

我的理解是,您需要在CalDAV服务器(https://www.rfc-editor.org/rfc/rfc4791)上托管日历。简单地发布一个文件(.ics)与在日历引擎上托管一个日历不同。

有完全相同的问题,我通过安装davmail服务器并通过php发布日历事件来解决它。它可以配置http基本身份验证,这相对容易与CURL之类的东西一起使用。Davmail有很好的文档和各种设备的设置指南

为了使它真正双向,你可以只存储用户的凭据信息,并使用crontab或类似的东西发出请求。

我认为您应该能够通过将METHOD从PUBLISH更改为REQUEST并在VEVENT块中添加ORGANIZER条目来使其工作,即使它是一个虚拟的电子邮件地址。

详细信息请参见RFC 2446

我知道"IP*Works! "Internet Toolkit"已支持WebDav.

最新更新