2011-10-28 12 views
9

Ho cercato di creare un calendario iCal in .NET che possa essere sincronizzato con altri dispositivi. Sto usando DDay.iCal per generare eventi iCal dai miei oggetti dati, e finora tutto funziona perfettamente. Da Outlook, mi sono iscritto al calendario (Add Calendar » da Internet) indicando un URL che genera un file ICS:File iCal aggiornabili a due vie in .NET

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

Gli eventi sono correttamente importati nel calendario; tuttavia, in qualsiasi software di Calendar che ho provato, non sono stato in grado di aggiornare o eliminare eventi. Non è che ci sia un errore nel ricevere la notifica di cancellazione; è semplicemente che tutti i client riconoscono il calendario come di sola lettura.

La mia idea è che fornendo gli URL, sarei in grado di avere Outlook o Google Calendar contattare il mio server per eliminare un evento. La mia intera idea di come dovrebbe funzionare, o sto semplicemente perdendo le proprietà appropriate? (O, forse, sono io importare il calendario in modo non corretto, o distribuirlo in modo non corretto, secondo il codice di cui sopra?)

Un calendario generato da GenerateCalendar sopra, potrebbe essere simile a questa:

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

Ciao David. Devo creare un server CalDAV per la mia applicazione .NET che contenga un calendario per sincronizzarlo con iPhone e altri dispositivi mobili. Ti chiederei se puoi indicarmi una direzione? O forse possiamo fare qualcosa insieme? – BennoDual

+0

@ t.kehl: Non ho mai iniziato a creare un'intera implementazione CalDAV. Penso che l'opzione migliore sarebbe installare Exchange sul lato server e far sincronizzare i dispositivi mobili con quello, e usare l'applicazione per inviare le cose a Exchange. (Non mi sono nemmeno imbarcato su questo, però, quindi non ho alcun suggerimento) –

risposta

0

penso che dovresti essere in grado di farlo funzionare modificando METHOD da PUBLISH a REQUEST e aggiungendo una voce ORGANIZER al blocco VEVENT, anche se si tratta di un indirizzo email fittizio.

Per maggiori dettagli vedere RFC 2446

+0

Grazie, ma sto ancora avendo problemi. E anche se ottengo che il client del calendario riconosca che voglio che le modifiche siano consentite, come faccio a ricevere una notifica quando vengono apportate modifiche. Il client dovrebbe inviare una richiesta alla proprietà 'URL'? –

+0

Non penso che otterrete una risposta interattiva direttamente alla vostra applicazione. Sospetto che possa essere visto come un buco di sicurezza abbastanza significativo. Tuttavia, se si imposta un noto indirizzo di posta elettronica come organizzatore e quindi si crea un'applicazione che monitora questo indirizzo e-mail, si dovrebbe essere in grado di ricevere le risposte generate dagli utenti che accettano o annullano la richiesta di invito e aggiornare il calendario interno da quelle risposte. –

+0

Beh, questo è parte del mio problema: anche quando si specifica un organizzatore, che viene visualizzato correttamente in Outlook come organizzatore, non sto ancora ricevendo alcuna risposta su quell'indirizzo quando l'utente fa clic su "Accetta". Ma penso che in realtà sia un po 'fuori rotta rispetto a quello che voglio: ci sono diverse soluzioni multi-client in cui i calendari sono sincronizzati a due vie. Non riesco a capire perché non dovrei essere in grado di farlo; la sicurezza è qualcosa di cui dovrò preoccuparmi, ovviamente. È solo che non è possibile * nell'ambito del formato iCal *? In tal caso, suppongo che la mia domanda sia: quale formato * posso * utilizzare, per fornire un calendario –

1

La mia comprensione è che è necessario per ospitare il tuo calendario su un server CalDAV (http://tools.ietf.org/html/rfc4791). La semplice pubblicazione di un file (.ics) è diversa dall'hosting di un calendario su un motore del calendario.

+0

Grazie. Anch'io ho cercato in quella direzione. Conosci qualche server CalDAV .NET? Ho trovato per lo più mac-stuff e alcune configurazioni di php e python. In caso contrario, probabilmente eliminerò iCal e cercherò di utilizzare Exchange come livello di messaggistica ... –

+0

Non sono a conoscenza di alcun server CalDAV .NET. Sono sicuro che tu abbia già visto [questo] (http://caldav.calconnect.org/implementations/servers.html). Puoi risolvere il problema: assumere un server ospitato (ad esempio Google) e compilare un calendario ospitato tramite le chiamate all'API client CalDAV? – fmr

+0

la mia taglia stava per scadere; potresti averlo Non credo che assumerò un server ospitato, ma potrei esaminare la scrittura di una porta di uno dei java open source dal tuo elenco. O semplicemente, o semplicemente usando Exchange come livello di messaggistica ... Preferirei ospitare le mie cose, comunque ... –

1

Aveva lo stesso identico problema e l'ho risolto installando il server di davmail e gli eventi del calendario pubblicati tramite php. Può essere configurato con l'autenticazione di base http che è relativamente facile da usare con cose come CURL. Davmail ha una buona documentazione e guide di installazione per vari dispositivi

Per renderlo davvero a 2 vie è possibile archiviare semplicemente le informazioni credenziali degli utenti ed effettuare richieste con crontab o qualcosa di simile.

+0

Grazie, esaminerò che –