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

.net NET中的双向可更新iCal文件,.net,icalendar,.net,Icalendar,我一直在尝试在.NET中创建可以与其他设备同步的iCal日历。我一直在使用从数据对象生成iCal事件,到目前为止,一切正常。在Outlook中,我通过指向生成ics文件的URL订阅了日历(从Internet添加日历): Response.Clear(); Response.ContentType = "text/calendar"; Response.AddHeader("Content-Disposition", "inline; filename=\"Calendar.ics\""); Re

我一直在尝试在.NET中创建可以与其他设备同步的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();
事件已正确导入日历;然而,在我尝试过的任何日历软件中,我都无法更新或删除事件。并不是在接收删除通知时出错;很简单,所有客户端都将日历识别为只读

我的想法是,通过提供URL,我可以让Outlook或Google calendar联系我的服务器以删除事件。是我的整个想法都错了,还是我只是错过了正确的属性?(或者,根据上面的代码,我是否错误地导入了日历,或者错误地分发了日历?)

上面的
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

我认为,通过将方法从“发布”更改为“请求”,并在VEVENT块中添加一个组织者条目,即使它是一个虚拟电子邮件地址,也应该能够让它正常工作


有关更多详细信息,请参见

我的理解是,您需要在CalDAV服务器()上托管日历。简单地发布文件(.ics)不同于在日历引擎上托管日历。

我知道它支持。

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


要使它真正成为双向的,您只需存储用户的凭证信息,并使用crontab或类似的东西发出请求

谢谢,但我还是有问题。即使我确实让日历客户端认识到我希望允许更改,在进行更改时如何得到通知。客户机是否应该向
URL
属性发送请求?我认为您不会直接得到应用程序的交互式响应。我怀疑这可能被视为一个相当严重的安全漏洞。但是,如果您将一个众所周知的电子邮件地址设置为组织者,然后创建一个监控此电子邮件地址的应用程序,您应该能够接收由接受或取消邀请请求的用户生成的响应,并根据这些响应更新您的内部日历。这是我的问题的一部分:即使指定了组织者,也会在Outlook中正确显示为组织者,当用户点击“接受”时,我仍然没有收到任何关于该地址的回复。但我认为这实际上有点偏离了我想要的:有几种多客户端解决方案,其中日历是双向同步的。我不明白为什么我不能;很明显,安全问题是我必须担心的。只是在iCal格式的范围内不可能吗?在这种情况下,我想我的问题是:我可以使用什么格式来提供acalendar,以便与我选择的日历客户端同步,并从我的软件或第三方日历软件(如Outlook或Google calendar)进行更新?谢谢。我也一直在朝那个方向看。您知道任何.NET CalDAV服务器吗?到目前为止,我主要找到了mac的东西和一些php和python的设置。否则,我可能会放弃iCal,并希望将Exchange用作消息传递层……我不知道有任何.NET CalDAV服务器。我相信你已经看过了。你能解决这个问题吗:假设一个托管服务器(比如谷歌)并通过CalDAV客户端API调用填充一个托管日历?我的奖金即将到期;你可以拥有它。我不认为我会假设一个托管服务器,但我可能会考虑为您列表中的一个开源java服务器编写一个端口。或者只是将Exchange用作消息传递层。。。无论如何,我宁愿自己主持我的节目……我并不是真的想要赏金——不过谢谢。我自己也遇到过同样的问题,最终还是放弃了,因为我不想了解运行CalDAV服务器的复杂性,尤其是如何将该服务器的帐户概念与我自己的合并。当时,我的结论是,最好的选择是使用基于Python的,因为它似乎得到了积极维护,而且我在Linux上运行服务器,使用.NET应用程序的Mono堆栈。我需要为我的.NET应用程序创建一个CalDAV服务器,其中包含一个日历,用于与iPhone和其他移动设备同步。我想问你能不能给我指个方向?或者我们可以一起做点什么?@t.kehl:我从未开始构建整个CalDAV实现。我认为最好的选择是安装Exchange服务器端,让移动设备与之同步,并使用您的应用程序将内容推送到Exchange。(不过,我自己也没有着手做这件事,所以我真的没有任何建议)