Wednesday, January 24, 2007 7:36 AM
mjurek
Konečně vývojářská API pro Exchange
S novou verzí Exchange 2007 přichází několik zajímavých novinek pro vývojáře. Až do verze 2003 byl vývoj proti serveru dosti tristní. Existovalo velké množství různých API, z nichž většina měla "drobné" chybičky. Nejčastěji používané byly:
- MAPI - umí cokoliv, ale vhodné jenom pro otrlé vývojáře v C++
- CDO - COM knihovna nad MAPI, ale bohužel není "remotable", tzn. kód musí běžet na stejném fyzickém počítači jako Exchange
- WebDAV - rozšíření HTTP o nové příkazy (nad rámec GET, POST) - funkční, ale těžkopádné pro řadu úloh, navíc chybí jakékoliv API, takže HTTP požadavky a odpovědi musíte generovat těžce sami. Pravděpodobně také narazíte na problémy s autentizací pokud je vše rozděleno na více serverů.
- Objektový model Outlooku - komfortní, ale závislý na Outlooku, tudíž nepoužitelný v serverových scénářích
V Exchange 2007 zůstávají všechny tyto technologie (prozatím) funkční, ale mentálně jsou nahrazeny dvěma novými technologiemi.
Tou první je .NET extenzibilita, která využívá toho, že velká část serveru byla přepsána do C#. Pokud chcete odchytávat události při zpracování nebo příjmu pošty, vytvoříte si vlastní třídu odvozenou z RoutingAgent anebo SmtpReceiveAgent třídy (plus příslušnou factory třídu), zaregistrujete na požadovaném serveru a je to. Při práci se zprávami využíváte .NET třídy ze jmenného prostoru Microsoft.Exchange.Data, více zde.
Pokud chcete Exchange používat jako datovou vrstvu pro svoji aplikaci, je zpřístupněná pomocí EWS (Exchange Web Services). Stačí přidat webovou referenci do vaší aplikace a můžete vesele stahovat data. Webové služby byly navrženy podle paradigmatu "contract first", takže v mnoha případech bude snadnější vygenerování XML dokumentu, validace podle schématu (najdete v souborech types.xsd a messages.xsd) a odeslání na server. Třídy vygenerované ze schématu nejsou totiž zcela komfortní - řada tříd má minimální přidanou hodnotu, mají pouze bezparametrické konstruktory apod., ale vzhledem k tomu, že jsou označeny klíčovým slovem partial, můžete si k těmto třídám trochu komfortu přidat. Zajímavostí je možnost notifikací, a to dokonce ve dvou variantách. Při "pull" způsobu vytvoříte subskripci na podmnožinu dat a poté si periodicky taháte změny od posledního volání (resp. od předaného watermarku). Při "push" způsobu předáte při vytváření subskripce URL svojí webové služby implementující příslušné rozhraní a ES volá vaši webovou službu kdykoliv se něco stane (plus v periodických intervalech, aby dal najevo, že je naživu).
Oproti přechozím verzím je to z vývojářského pohledu učiněný ráj. Pár příkladů kódu najdete v příloze, mnohem více v Exchange 2007 SDK.