È il preparatissimo Nikola Dudar a presentare questa sessione. Nikola prima era parte del team di Visual C++ e tempo fa era venuto a Milano per il Visual C++ tour, poi abbiamo fatto un intervento insieme presso un ISV e successivamente al MVP Summit.
Questa nuova libreria è un nuovo set di Win32 API con nessuna dipendenza dal Framework.NET che nascono con Windows 7. La bella notizia è che sarà disponibile come package per tutti i sistemi operativi Windows a partire da XP.
Gli standard implementati sono quelli WS-* (SOAP) che permettono l'interoperabilità con WCF, ASMX e non-Microsoft stacks.
Si parte dalla demo che vede la realizzazione di un client nativo che consuma un servizio WCF. Una utility produce un wrapper in linguaggio C che permette di dimenticare totalmente tutta l'infrastruttura e il messaggio soap. In sostanza ci sono wrapper per ciascuno dei tre pilastri di un web service: ABC (Address, Binding, Contract).
Viene poi mostrato come prendere totale controllo delle opzioni del messaggio, le modalità di trasporto, gli header in caso di trasporto http, e le opzioni per usufruire di WS-Security.
Non tutte le opzioni/protocolli di WCF sono supportati in questo momento ma considerato che WCF è in grado di esporre più endpoint contemporaneamente, non lo vedo come grosso problema.
Per quello che riguarda il messaggio XML, c'è pieno controllo al contenuto del messaggio, quindi encoding Text, Binary e MTOM. Il messaggio è fruibile con tre opzioni: XmlBuffer, XmlReader, XmlWriter.
Nella serializzazione vengono mappato lo schema Xml a dei tipi "C".
La ciliegina sulla torta è uno speciale heap che viene utilizzato per evitare le noiose allocazioni in stile C (chiedere all'API la dimensione da allocare, richiamarla con l'allocazione). Questo heap invece semplifica enormemente il task.
Ritengo questa soluzione perfetta per moltissimi scenari in modo da evitare la dipendenza da COM o Assembly. Il livello di disaccoppiamento offerto da un servizio calza alla perfezione in uno scenario di interoperabilità con il codice nativo in quanto permette una evoluzione indipendente delle versioni e soprattutto nessuna dipendenza dalla versione del compilatore C++.