Tworzenie usługi CalDAV z .Net

Chcę utworzyć kalendarz w mojej aplikacji, który użytkownicy zewnętrzni mogą wyświetlać.

Format CalDAV (w zasadzie WebDAV + iCalendar) wydaje się być stosunkowo szeroko obsługiwany, chociaż przez niektórych klientów (na przykład Outlook) jest raczej nietypowy. Zupełnie nowy dla mnie.

Chcę zewnętrznie publikować wydarzenia, nie potrzebuję użytkowników, aby mogli je aktualizować.

Format tekstowy zdarzeń w plikach .ics wydaje się stosunkowo prosty:

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN

BEGIN:VEVENT
DTSTART:20091130T000000Z
DTEND:20091201T000000Z
SUMMARY:Test event for calendar format
LOCATION:Company site
DESCRIPTION:Test event.\nMore text on a new line
END:VEVENT

END:VCALENDAR

Jednak tak naprawdę nie chcę pisać własnego konstruktora plików ics. Nazwy kluczy zaczynające się w każdej linii nie wydają się być zbyt spójne między plikami ics.

Czy istnieje tam implementacja .Net? W idealnej sytuacji nie chcę konfigurować całej implementacji WebDAV - wystarczy pobrać kalendarz tylko do odczytu.

Chcę, aby był to adres URL, który użytkownicy mogą synchronizować z telefonami iPhone, Android i Blackberry. Wiem, że mogą obsługiwać usługi CalDAV od niektórych dostawców, ale nie innych (na przykład mój iPhone może synchronizować z kalendarza Google, ale nie działa z wydarzeniami FaceBooka) - każdy ma jakiś pomysł, dlaczego?

Myślę, że wydarzenia mogą również zawierać załączniki MIME - czy jest to wystarczająco wspierane, aby warto było się nad tym zastanowić?

Aktualizacja

Dalsze badania w tym zakresie wykazały pewne dziwne niespójności w większości wdrożeń. Żaden z głównych systemów operacyjnych dla klientów mobilnych (iPhone, Blackberry, Android) nie obsługuje plików .ics.

Jednak iPhone'y mogą otwierać .ics z adresu URL (wybierz subskrypcję kalendarza), a to również działa z FaceBook. Blackberry i Android nie mogą jednak. Myślę, że Blackberry może obsłużyć pełną opcję CalDAV (a nie tylko plik .ics), ale niewiele wie o programowaniu.

Czy istnieje spójny sposób, aby to zrobić?

questionAnswers(3)

yourAnswerToTheQuestion