title: Creating a CalDAV service with .Net
body: <p>I want to create a calendar in my application that external users can view.</p>
  
  <p>The CalDAV (basically WebDAV+iCalendar) format seems to be relatively widely supported, although if rather unusually by some clients (Outlook, for instance). Completely new to me though.</p>
  
  <p>I want to externally publish events, I don't need users to be able to update them.</p>
  
  <p>The text format of events in .ics files appears relatively simple:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>However I don't really want to write my own ics file builder. The key names starting on each line don't seem to be very consistent between ics files too.</p>
  
  <p>Is there a .Net implementation out there? Ideally I don't want to set up a whole WebDAV implementation - just the ability to retrieve a read-only calendar.</p>
  
  <p>I mainly want this to be at a url that users can sync from iPhone, Android and Blackberry phones. I know that they can handle CalDAV services from some suppliers but not others (for instance my iPhone can sync from Google calendar but fails with FaceBook's events) - anyone have any idea why?</p>
  
  <p>I think events can also contain MIME attachments - is this sufficiently supported to be worth looking into too? </p>
  
  <p><strong>Update</strong></p>
  
  <p>Further research on this has identified some weird inconsistencies in most implementations. None of the major mobile client OSs (iPhone, Blackberry, Android) can handle .ics files.</p>
  
  <p>However iPhones can open an .ics from a URL (choose to subscribe to a calendar) and this does work with FaceBook too. Blackberry and Android can't however. I think the Blackberry can handle the full CalDAV option (rather than just the .ics file) but don't know much about programming for it.</p>
  
  <p>Is there a consistent way to do this out there? </p>