2011-10-28 12 views
9

He intentado crear un calendario iCal en .NET que pueda sincronizarse con otros dispositivos. He estado usando DDay.iCal para generar eventos de iCal desde mis objetos de datos, y hasta ahora todo funciona bien. Desde Outlook, me he suscrito al calendario (añadir el calendario » desde Internet) apuntando a una dirección URL que genera un archivo ICS:Archivos iCal actualizables bidireccionales en .NET

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

Los eventos están debidamente importados en el calendario; sin embargo, en cualquier software de calendario que haya probado, no he podido actualizar ni eliminar eventos. No es que haya un error al recibir la notificación de eliminación; es simplemente que todos los clientes reconocen el calendario como de solo lectura.

Mi idea es que mediante el suministro de URL, podría tener Outlook o el calendario de Google en contacto con mi servidor para eliminar un evento. ¿Es mi idea total de cómo se supone que funciona mal o me estoy perdiendo las propiedades adecuadas? (O, tal vez, soy yo importar el calendario de forma incorrecta, o distribuir de forma incorrecta, según el código anterior?)

Un calendario generado por GenerateCalendar anteriormente, puede ser algo como esto:

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

Hola David. Necesito crear un servidor CalDAV para mi aplicación .NET que contiene un calendario para sincronizarlo con iPhone y otros dispositivos móviles. Te preguntaría si puedes dirigirme en una dirección. ¿O quizás podamos hacer algo juntos? – BennoDual

+0

@ t.kehl: Nunca comencé a construir una implementación completa de CalDAV. Creo que la mejor opción sería instalar Exchange en el servidor y hacer que los dispositivos móviles se sincronicen con eso, y usar su aplicación para enviar cosas a Exchange. (Tampoco me he embarcado en eso, así que realmente no tengo ningún indicador) –

Respuesta

0

pienso que debería poder hacer que funcione cambiando el MÉTODO de PUBLISH a REQUEST y agregando una entrada ORGANIZER al bloque VEVENT, incluso si se trata de una dirección de correo electrónico ficticia.

Para más detalles ver RFC 2446

+0

Gracias, pero todavía tengo problemas. E incluso si obtuve que el cliente de calendario reconozca que deseo que se permitan cambios, ¿cómo me notificarán cuando se realicen cambios? ¿Se supone que el cliente debe enviar una solicitud a la propiedad 'URL'? –

+0

No creo que vaya a obtener una respuesta interactiva directamente a su aplicación. Sospecho que podría ser visto como un agujero de seguridad bastante significativo. Sin embargo, si configura una dirección de correo electrónico conocida como organizador y luego crea una aplicación que supervisa esta dirección de correo electrónico, debería poder recibir las respuestas generadas por los usuarios que aceptan o cancelan la solicitud de invitación y actualizar su calendario interno de esas respuestas. –

+0

Bueno, eso es parte de mi problema: incluso cuando se especifica un organizador, que aparece correctamente en Outlook como el organizador, todavía no recibo ninguna respuesta en esa dirección cuando el usuario hace clic en "Aceptar". Pero creo que eso está un poco alejado de lo que quiero: hay varias soluciones de clientes múltiples donde los calendarios se sincronizan en ambos sentidos. No puedo ver por qué no debería ser capaz de hacerlo; la seguridad es algo de lo que tendré que preocuparme, obviamente. ¿Es solo que no es posible * dentro del alcance del formato iCal *? En ese caso, supongo que mi pregunta es: ¿qué formato * puedo * usar, para proporcionar un calendario –

1

Mi entendimiento es que se necesita para alojar su calendario en un servidor CalDAV (http://tools.ietf.org/html/rfc4791). Simplemente publicar un archivo (.ics) es diferente de alojar un calendario en un motor de calendario.

+0

Gracias. He estado buscando en esa dirección también. ¿Conoces algún servidor .NET CalDAV? En su mayoría, he encontrado mac-stuff y algunas configuraciones de php y python hasta ahora. De lo contrario, probablemente deje caer iCal y busque usar Exchange como una capa de mensajes ... –

+0

No conozco ningún servidor .NET CalDAV. Estoy seguro de que ya ha visto [esto] (http://caldav.calconnect.org/implementations/servers.html). ¿Puedes resolver el problema de la mejor manera posible: asumir un servidor alojado (por ejemplo, Google) y rellenar un calendario alojado a través de las llamadas a la API del cliente CalDAV? – fmr

+0

mi recompensa estaba a punto de caducar; puedes tenerlo No creo que asuma un servidor alojado, pero puedo buscar escribir un puerto de uno de los java de código abierto de su lista. O eso o simplemente usando Exchange como una capa de mensajes ... Preferiría alojar mis cosas, de todos modos ... –

1

Tuve exactamente el mismo problema y lo resolví instalando el servidor davmail y publiqué eventos de calendario a través de php. Se puede configurar con autenticación básica http, que es relativamente fácil de usar con cosas como CURL. Davmail tiene una buena documentación y guías de configuración para varios dispositivos

Para que sea realmente bidireccional, solo puede almacenar información de credenciales de los usuarios y realizar una solicitud con crontab o algo similar.

+0

Gracias, voy a investigar eso –

Cuestiones relacionadas