Les "Store Event Sinks" d'Exchange 2003: introduction et guide de résolution des problèmes

Avant toute chose, je vous invite à télécharger le SDK d’Exchange 2003 & 2007 :

- Exchange 2003 : https://www.microsoft.com/Downloads/details.aspx?FamilyID=5ca18d40-5a37-4a20-94ae-6a6cf6cb846d&displaylang=en

- Exchange 2007 : https://www.microsoft.com/downloads/details.aspx?FamilyId=190F71A4-7B5F-4A4C-99BA-9BD032E16E15&displaylang=en

Vous trouverez alors des exemples de code autour des store event sinks dans: \Exchange SDK\SDK\Samples\Events\VBEvents

Présentation générale des Store Event Sinks

Sous Exchange 2000/2003, un système de notification peut être géré via la technologie des « Store Event Sinks ». Ces derniers se modélisent sous la forme de composants tournant dans COM+ et capables de surveiller les opérations de sauvegarde ou de suppression dans le store Exchange sur une boîte aux lettres ou l’ensemble des boîtes aux lettres. Ces notions sont assez complexes pour quelqu’un qui débute et pourrait justifier un transfert d’expertise. Un point d’entrée intéressant dans le SDK est ici : https://msdn2.microsoft.com/en-us/library/ms879478.aspx & Exchange Store Event Sinks : https://msdn2.microsoft.com/en-us/library/aa142643.aspx

Voici quelques exemples précis :

- Implementing an OnSave Event Sink : https://msdn2.microsoft.com/en-us/library/ms992721.aspx

- La documentation des exemples se trouve ici: https://msdn2.microsoft.com/en-us/library/ms878012.aspx

- Pour terminer, voici les références complètes: https://msdn2.microsoft.com/en-us/library/ms992652.aspx

Scénario : utilisation d’un Store Event Sink Synchrone dit « Store Wide »

Si vous souhaitez surveiller l’ensemble des boîtes aux lettres d’un seul coup. Il faut alors utiliser les Event Sinks synchrones et dit « Store Wide ». Ces derniers sont un peu spéciaux et sont alors capable de surveiller l’ensemble du store Exchange d’un seul coup. Il faut alors faire très attention à son écriture car la moindre opération de sauvegarde/suppression générera son appel. Ce type de sink doit alors être particulièrement succins et rapide.

Voici les inconvénients :

- Il faut impérativement que son traitement soit rapide car il bloque un des thread d’Exchange et peut impacter la performance globale du serveur de messagerie

- Il faudra faire attention à ne pas rentrer dans une boucle infinie : un event sink « store wide » écoute toutes les opérations potentielles d’écriture. Donc le sink risque potentiellement de « s’auto-appeler » en boucle. Mais ce n’est finalement qu’un problème de logique d’implémentation

Son implémentation est envisageable en VB 6.0 avec une performance accrue en C++. Dans la mesure du possible, évitez .NET qui ajoute une couche d’interopabilité avec COM rendant l’ensemble moins performant qu’avec un langage COM pur comme C++ ou VB. Evitez ensuite comme la peste de le faire en VBScript. Malheureusement, comme vous le savez sans doute déjà, VB 6.0 n’est plus supporté à partir d’Avril 2008. Cela limitera donc les possibilités de développement autour d’Exchange à C++ et .NET .

Informations détaillées et exemples de code

- Store Event Sink synchrone : https://msdn2.microsoft.com/en-us/library/ms877938.aspx

- Méthode OnSyncSave pour les sinks Synchrones : https://msdn2.microsoft.com/en-us/library/ms992702.aspx

- Registering for Store-Wide Events : https://msdn2.microsoft.com/en-us/library/ms878488.aspx

- Vous trouverez également des exemples de code en VB 6.0 et C++ dans le répertoire « Program Files\Exchange SDK\SDK\Samples\Events\ » suite à l’installation du SDK

Sur Exchange 2007, c’est une toute autre histoire. Les solutions de développement autour d’Exchange 2007 sont vraiment adaptées à notre plateforme .NET. Les opérations effectuées jadis via CDO 1.21, MAPI, CDOEX, WebDAV & store event sinks sont remplacées par l’utilisation des WebServices. Les opérations d’administration (création de boîte aux lettres, gestion des stores, etc.) gérées avant via CDOEXM sont remplacées par des commandes PowerShell facilement appelable depuis un code .NET.

Voici 2 points d’entrée intéressants expliquant une solution basée sur l’utilisation des WebServices d’Exchange 2007 pour remplacer le concept de store event sinks d’Exchange 2003 :

- Using Pull Notifications : https://msdn2.microsoft.com/en-us/library/aa579617.aspx

- Push Notification Sample Application (Exchange Web Services) : https://msdn2.microsoft.com/en-us/library/bb204063.aspx

Pour terminer, pour vous aider, je vous ai également attaché un document qui se présente sur la forme d’un « guide » pour analyser les problèmes les plus classiques autour des Store Event Sinks (enregistrement dans COM+, problème d’exécution, méthode de débogage). Ce guide, en Anglais, s’appuie sur mes années d’expérience au support européen Microsoft en tant que développeur sur les solutions de messagerie Exchange & Outlook. J’espère qu’il vous sera utile !

-= David =-

Store Event Sink Troubleshooting guide .doc