Suite à l'annonce Interopérabilité de Microsoft, les 30.000 pages d'API documentées dans le cadre notamment du procès avec la Communauté Européenne ont été mises à disposition. Pour information ou rappel, ce travail collossal a été réalisé sur plusieurs années et par près de 200 spécialistes.

Dans le cadre de l'interop et de la SOA, la documentation des protocoles de communication MCPP sont passionnants, ils offrent un bon complément à la documentation MSDN du framework .Net.

En les parcourant je me suis intéressé à l'encodage binaire des messages SOAP. La lecture de ces trois documents permet de découvrir et approfondir les choix et l'implémentation choisie par Microsoft pour optimiser la sérialization de documents XML.

  • [MC-NBFS]: .NET Binary Format: SOAP Data Structure
  • [MC-NBFX]: .NET Binary Format: XML Data Structure
  • [MC-NBFSE]: .NET Binary Format: SOAP Extension 

Du coup, voilà qui m'amène à me poser la question du choix de la solution d'encodage optimale, des options disponibles, ainsi que l'état des standards dans le domaine. Voici la synthèse de mes recherches au 6 mars 2008 :

  • Si souhaitez disposer de critères de choix d'une solution d'encodage ou bien de compression de messages SOAP, je vous invite à parcourir cette présentation qui fait état d'une expérimentation à l'aide de Sun Fast InfoSet et GZIP pour des messages de différentes tailles : A Study of the Impact of Compression and Binary Encoding on SOAP. Dommage l'encodage SOAP binaire proposé avec Microsoft n'a pas été testé.
  • Côté spécifications, je vois 3 stratégies d'encodage XML émerger : Microsoft (spécifications juste au-dessus) utlisé par WCF, SUN XML Fast InfoSet (FI) et celle du W3C Efficient XML Interchange(EXI) en draft depuis Decembre 2007.

Bilan vis à vis de WCF...

WCF propose 3 modes d'encodage des messages SOAP : Text (XML en clair), Binaire (optimisation en remplaçant les tags par une codification pré-établie, un peu comme une compression sur mesure qui a aussi l'avantage d'optimiser la phase de decoding), et MTOM (recommandation W3C qui cible l'intégration de données au format binaire au sein d'un message SOAP).

Warning de Nicholas Allen: The binary message encoder requires you to use SOAP 1.2 and any version of message addressing. Validation for the message encoder checks that you are using SOAP 1.2. A transport can supply its own native version of addressing, but the HTTP, TCP, and named pipe transports don't work with this for the binary encoding. The validation doesn't check to make sure that you have some kind of message addressing, so if you are using AddressingVersion.None, then that won't show up as an error until you try to send a message.

L'encodage binaire proposé par WCF optimise l'échange des flux, mais de façon non interopérable (même si les spécifications sont publiées, je n'ai pas connaissance d'implémentation Java de la sérialization proposée par Microsoft; voilà un projet de stage :-)).

Si vous souhaitez optimiser la transmission de vos trames SOAP tout en restant interopérable, vous avez l'option de miser sur les spécifications Draft EXI du W3C dont AgileDelta propose une implémentation pour WCF, mais aussi pour AXIS 1, AXIS 2 et WebLogic.