2011-10-28 16 views
9

Próbowałem utworzyć kalendarz iCal w .NET, który można zsynchronizować z innymi urządzeniami. Używałem DDay.iCal do generowania zdarzeń iCal z moich obiektów danych i jak dotąd wszystko działa poprawnie. Z programu Outlook, mam zapisany do kalendarza (Dodaj kalendarz » z Internetem) poprzez wskazanie adresu URL, który generuje plik ICS:Dwukierunkowe, aktualizowane pliki iCal w .NET

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

Zdarzenia są poprawnie importowane do kalendarza; jednak w żadnym oprogramowaniu Kalendarza, którego próbowałem, nie mogłem aktualizować ani usuwać zdarzeń. Nie oznacza to, że wystąpił błąd podczas odbierania powiadomienia o usunięciu; po prostu wszyscy klienci rozpoznają kalendarz jako tylko do odczytu.

Mój pomysł polega na tym, że dostarczając adresy URL, będę mógł mieć kontakt z moim serwerem w programie Outlook lub kalendarz Google, aby usunąć wydarzenie. Czy cały mój pomysł na to, że ma działać źle, czy po prostu brakuje mi odpowiednich właściwości? (A może jestem importowania kalendarza nieprawidłowo lub w celu rozpowszechniania go nieprawidłowo, jak na powyższym kodzie?)

Kalendarz generowane przez GenerateCalendar powyżej, może wyglądać następująco:

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

Witaj David. Potrzebuję utworzyć serwer CalDAV dla mojej aplikacji .NET, która zawiera kalendarz do synchronizacji z iPhonem i innymi urządzeniami mobilnymi. Pytam cię, czy możesz wskazać mi kierunek? A może możemy zrobić coś razem? – BennoDual

+0

@ t.kehl: Nigdy nie zacząłem budować całej implementacji CalDAV. Myślę, że najlepszą opcją byłoby zainstalowanie serwera Exchange po stronie serwera i zsynchronizowanie z nim urządzeń przenośnych oraz użycie aplikacji do przesyłania rzeczy do Exchange. (Sam też tego nie robiłem, więc nie mam żadnych wskazówek) –

Odpowiedz

0

myślę że powinieneś być w stanie uruchomić go poprzez zmianę METHOD z PUBLISH na REQUEST i dodanie wpisu ORGANIZER do bloku VEVENT, nawet jeśli jest to fałszywy adres e-mail.

po więcej szczegółów patrz RFC 2446

+0

Dzięki, ale wciąż mam problem. Nawet jeśli sprawiłbym, że klient kalendarza rozpoznał, że chcę, aby zmiany były dozwolone, w jaki sposób otrzymam powiadomienie o wprowadzeniu zmian. Czy klient ma wysłać żądanie do właściwości 'URL'? –

+0

Nie sądzę, że otrzymasz interaktywną odpowiedź bezpośrednio z powrotem do aplikacji. Podejrzewam, że można to uznać za dość znaczącą lukę w zabezpieczeniach. Jeśli jednak skonfigurujesz dobrze znany adres e-mail jako organizator, a następnie utworzysz aplikację, która monitoruje ten adres e-mail, powinieneś być w stanie odbierać odpowiedzi generowane przez użytkowników akceptujących lub anulujących prośby o zaproszenie i aktualizować kalendarz wewnętrzny z te odpowiedzi. –

+0

Cóż, to część mojego problemu: nawet przy określaniu organizatora, który poprawnie wyświetla się w programie Outlook jako organizator, nadal nie otrzymuję żadnych odpowiedzi na ten adres, gdy użytkownik kliknie "Akceptuj". Sądzę jednak, że jest to trochę odbiegające od tego, co chcę: Istnieje kilka rozwiązań dla wielu klientów, w których kalendarze są zsynchronizowane dwukierunkowo. Nie rozumiem, dlaczego nie powinienem; bezpieczeństwo jest czymś, o co oczywiście muszę się martwić. Czy to po prostu niemożliwe * w ramach formatu iCal *? W tym przypadku domyślam się, że moje pytanie brzmi: jaki format * można * użyć, aby udostępnić kalendarz –

1

Rozumiem, że trzeba zorganizować swój kalendarz na serwerze CalDAV (http://tools.ietf.org/html/rfc4791). Po prostu publikowanie pliku (.ics) różni się od hostowania kalendarza w aparacie kalendarza.

+0

Dzięki. Szukałem również w tym kierunku. Czy znasz jakiś serwer .NET CalDAV? Najczęściej znalazłem Mac-stuff i niektóre konfiguracje php i python do tej pory. W przeciwnym razie prawdopodobnie upuszczę iCal i wykorzystam Exchange jako warstwę komunikacyjną ... –

+0

Nie jestem świadomy żadnego serwera .DAD CalDAV. Jestem pewien, że już to widziałeś (http://caldav.calconnect.org/implementations/servers.html). Czy możesz rozwiązać problem na głowie: założyć hostowany serwer (powiedzmy Google) i zapełnić hostowany kalendarz za pomocą wywołań API klienta CalDAV? – fmr

+0

moja nagroda wkrótce wygasła; możesz go mieć. Nie sądzę, że założę hostowany serwer, ale mogę zajrzeć do pisania na liście jednego z otwartych źródeł java. Albo to albo tylko używanie Exchange jako warstwy wiadomości ... W każdym razie wolałbym hostować własne rzeczy ... –

1

Miałem dokładnie ten sam problem i rozwiązałem go przez zainstalowanie serwera davmail i opublikowanie wydarzeń w kalendarzu za pośrednictwem php. Może być skonfigurowany z podstawowym uwierzytelnianiem http, które jest względnie łatwe w użyciu z takimi elementami jak CURL. Davmail ma ładną dokumentację i instrukcje konfiguracji dla różnych urządzeń.

Aby to naprawdę dwukierunkowe można po prostu przechowywać informacje o referencjach użytkowników i wysyłać żądania za pomocą crontab lub czegoś podobnego.

+0

Dzięki, przyjrzę się temu –