我一直在尝试在.NET中创建一个可以与其他设备同步的iCal日历。我一直在使用DDay.iCal从我的数据对象生成iCal事件,到目前为止一切正常。在Outlook中,我通过指向生成ics文件的URL订阅了日历(添加日历»来自Internet ):
Response.Clear();
Response.ContentType = "text/calendar";
Response.AddHeader("Content-Disposition", "inline; filename=\"Calendar.ics\"");
Response.Write( GenerateCalendar() );
Response.End();
事件已正确导入日历;但是,在我尝试过的任何日历软件中,我都无法更新或删除事件。这并不是说收到删除通知时出错;只是所有客户都将日历识别为只读。
我的想法是,通过提供网址,我可以让Outlook或Google日历联系我的服务器以删除活动。我是否认为这应该是错误的,或者我错过了适当的属性? (或者,也许,我是按照上面的代码错误地导入日历,还是错误地分发日历?)
上面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
答案 0 :(得分:1)
我的理解是您需要在CalDAV服务器(http://tools.ietf.org/html/rfc4791)上托管您的日历。简单地发布文件(.ics)与在日历引擎上托管日历不同。
答案 1 :(得分:1)
有完全相同的问题,我通过安装davmail服务器并通过它发布日历事件解决了它。它可以使用http基本身份验证进行配置,这对于像CURL这样的东西来说相对容易使用。 Davmail为各种设备提供了很好的文档和设置指南
要实现双向,您只需存储用户的凭据信息,并使用crontab或类似的方式发出请求。
答案 2 :(得分:0)
我认为您应该能够通过将METHOD从PUBLISH更改为REQUEST并将ORGANIZER条目添加到VEVENT块来使其工作,即使它是虚拟电子邮件地址。
有关详细信息,请参阅RFC 2446
答案 3 :(得分:0)