Exchange Web Services (EWS)Steve Hardy
• Eee-doubleyou-es• Eee-wee-es• you w’s ?
How are we going to pronounce it ?
This is a ‘ewe’
- XML-based protocol (SOAP)- Introduced in Exchange 2007- Successor to previous WebDAV approach- Used from introduction for OWA 2007 and later
What is EWS
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope> <soap:Body> <GetItem> <ItemShape> <t:BaseShape>Default</t:BaseShape> <t:IncludeMimeContent>true</t:IncludeMimeContent> </ItemShape> <ItemIds><t:ItemId Id="AAAlAF" ChangeKey="CQAAAB" /></ItemIds> </GetItem> </soap:Body> </soap:Envelope>
• Outlook 2010– Free/Busy
– Some minor features
• Mac– Outlook 2011
– ‘Mail’
– ‘Addressbook’
– ‘Calendar’
• Other– Various opensource projects for accessing exchange server from
opensource packages (eg. Evolution, Thunderbird, etc)
– Various closed source projects (eg. Archivers, Indexers, etc)
Who/what is using EWS at the moment?
Relation to MAPI
MAPI
EWS Gateway(IIS plugin)
EWS Gateway(IIS plugin)
Exchange mail store message database
(EMSMDB)
EWS protocol
EWS: MAPI + CDO over XML
EWS Gateway(IIS plugin)EWS Gateway(IIS plugin)
EWS protocol
MAPI -> XML engine
Calendaring engine(like CDO)
Meeting/Task request engine (like CDO)
• Much more high-level functions– Easier for developers to use, less client-side code needed
– Solves most of the really hard stuff like recurrence and meeting request handling
• XML/SOAP interface allows access from any platform• XML/SOAP interface allows access from any programming
language (well, in theory …)• Most easily built on top of MAPI since MAPI already provides many
features that you need for EWS
Why was it designed this way ?
• On non-MS platform– You have no choice, except IMAP & CalDAV
• On MS platform– It’s easier than MAPI, and usable from .Net applications
• Why not IMAP?– Email only
– No handling of meeting requests, etc
• Why not CalDAV?– Calendar/tasks only
– No easy handling of meeting requests, etc
Why do clients use EWS?
EWS in Zarafa
EWS Gateway(Standalone server)EWS Gateway(Standalone server)
EWS protocol
MAPI -> XML engine
Calendaring engine(like CDO)
Meeting/Task request engine (like CDO)
• Forked processes (think ‘zarafa-ewsd’)• Primarily in Python
– Rapid development possible
– Speed disadvantage compared to C++ is not important, since most real processing is done by MAPI (C++)
EWS in Zarafa: general design
In order of priority:
1.Support e-mail handling in Outlook 2011, Mac Mail
2.Support addressbook handling in Outlook 2011, Mac Addressbook
3.Support calendar handling
4.Support MR/TR handling
5.Management functions like setting OOF, etc.
Low priority:-Bulk handling features of EWS-Administration features
EWS general development goals
• Always the question: pull or push XML ?
Push- Read all XML at once, parse it all, then pass to processor- Easy to code, clear overview- Slow for large requests: high latency
Pull- Read XML bit-by-bit, process when possible (before reading end of
XML request)- Harder to code, sometimes makes the code less readable- Low memory footprint, low latency
XML handling in Zarafa-EWS
Demo