maggio 2007 - Posts
Ho appena visto la segnalazione di Don Box e devo dire che è veramente suggestivo. Accidenti ... se l'avessi saputo ... ho ordinato proprio qualche settimana fa il tavolino in salotto :-)! Adesso mi toccherà buttarlo e sostituirlo :-) !!!!
A volte capita di avere bisogno di implementare servizi WCF che lavorino direttamente con il Message (System.ServiceModel.Channels.Message) a basso livello.
Ad esempio può servire per creare SOAP Router o SOAP Intermediaries. In questi casi le ricerche XPath sul messaggio SOAP devono avvenire usando anche i vari namespace di SOAP, WS-Security, WS-Addressing, ecc. a seconda dei casi.
In questi situazioni, al di là di utilizzare un XPathNavigator, o qualcosa di equivalente, sul messaggio XML diventa anche fondamentale avere un XmlNamespaceManager correttamente configurato per riconoscere i vari Namespace XML delle specifiche di cui sopra. Ebbene in WCF esiste già una classe pensata ad hoc. Si trova in System.ServiceModel.Dispatcher e si chiama XPathMessageContext.
Ecco come utilizzarla, ad esempio per estrarre il SOAP Body ("/s12:Envelope/s12:Body", dove s12 è il prefisso usato per SOAP 1.2) con tutto il suo contenuto:
XmlNamespaceManager nsManager = new XPathMessageContext();
XPathExpression soapBodyExpression = XPathExpression.Compile("/s12:Envelope/s12:Body", nsManager);
XmlDocument xmlMessage = new XmlDocument();
xmlMessage.LoadXml(message.ToString());
XPathNavigator messageNavigator = xmlMessage.CreateNavigator();
XPathNodeIterator messageBodyIterator = messageNavigator.Select(soapBodyExpression);
if (messageBodyIterator.Count > 0)
{
if (messageBodyIterator.MoveNext())
{
// Scrive a Console il tag SOAP:Body e tutto il suo contenuto
Console.WriteLine(messageBodyIterator.Current.OuterXml);
}
}
N.B.: La classe deriva da XsltContext, quindi può risultare utile anche nelle trasformazioni XSLT dei messaggi SOAP.
A volte consola pensare che anche sistemi come Google sono fallibili.

Simpatico il "30 secondi" della serie ... qualunque cosa sia successa, non potrà durare più di 30 secondi ...
Ieri ho visto per la prima volta dal vivo un HTC Advantage 7500. Erano mesi che lo aspettavo :-) ... e mi ha un po' deluso ... è davvero molto grosso e pesante. Al di là del fatto che l'esercente che ne aveva uno in casa lo vendeva ad un prezzo assolutamente fuori mercato (1200€) contro i circa 700/800€ che si possono pagare online (http://www.expansys.com/p.aspx?i=146709) e che già non sono pochi ... ma il vero problema è che è troppo grosso e pesante.
Il mio JasJar ormai sta tirando gli ultimi, la batteria dura pochissimo, il display si gira da solo quando gli pare e con tutte le cadute che si è fatto è ancora un miracolo che si accenda.
Chi mi conosce sa che mi concedo pochi regali ... ma sui telefonini con Windows Mobile perdo letteralmente la testa e potrei mandare sul lastrico la famiglia :-) ... mia moglie, che era con me, pensava che uscissi dal negozio con l'Advantage in mano ... e invece no! Per la prima volta mi sono trattenuto dal comprarlo o dall'ordinarlo online appena rientrato a casa!
Non mi convince. La prossima settimana sarò ad Orlando, per seguire TechEd 2007, e spero ci sia qualche offerta interessante come dua anni fa a PDC, quando mi sono portato a casa il JasJar a meno di 200$, ma non escludo di prendere comunque qualcosa di più piccolo e semmai dotarmi di un UMPC. Ormai non riuscirei più a girare senza agenda, contatti e browser in tasca. Però mi sono "disintossicato" dalla posta, che ormai non scarico più sul telefonino. Credetemi è un bene ... almeno quando non sono in ufficio, sono davvero via dall'ufficio.
Inizio a pensare che il giusto compromesso sia avere un telefono Windows Mobile, con tutti i vantaggi che ne conseguono, ma di dimensioni ragionevoli, come un HTC S710, e poi comprare un UMPC vero con Windows Vista on-board, come un HTC Shift, da portare in borsa al posto dei 4Kg di portatile che ho sempre con me.
Siamo in un periodo in cui è difficile prendere decisioni così importanti! :-)
PS: Si vede che è domenica e piove ...
Questa settimana, durante un corso su WF, ho mostrato come sia possibile utilizzare le rule di WF anche senza avere necessariamente un workflow alle spalle. L'infrastruttura di WF infatti consente di valutare RuleSet anche senza che ci sia un workflow collegato. Dal momento poi che le rule di un workflow sono persistite all'interno di un file .rules (pur sempre XOML) differente da quello che rappresenta il flusso ... facendo 1 + 1 possiamo definire regole esterne da usare in qualsisi programma che abbia bisogno di un motore di regole e poi valutarle con gli oggetti del framework di WF.
Ecco un esempio di codice che carica un file .rules da disco, lo deserializza usando il WorkflowMarkupSerializer, e ne valuta il risultato tramite la classe RuleEngine:
XmlTextReader reader = new XmlTextReader(@"..\..\DiscountCouponWorkflow.rules");
WorkflowMarkupSerializer serializer = new WorkflowMarkupSerializer();
RuleDefinitions rules = serializer.Deserialize(reader) as RuleDefinitions;
RuleSet ruleSet = rules.RuleSets["PriceRuleSet"];
RuleEngine ruleEngine = new RuleEngine(ruleSet, typeof(Customer));
ruleEngine.Execute(c);
Si noti il fatto che passo al motore di rule (l'istanza di RuleEngine) anche un oggetto come input del metodo Execute. Si tratta di un oggetto il cui tipo .NET è stato dichiarato nel costruttore della classe RuleEngine e rappresenta l'input su cui verranno applicate le regole. Ora, utilizzando un'interfaccia che descriva un comportamento comune a N diverse tipologie di oggetti, potremmo avere uno stesso file di regole applicabile sia ad un workflow, che implementa l'interfaccia nella definizione della sua classe, sia ad un nostro oggetto custom.
Mi hanno appena segnalato il blog ufficiale e relativo al REMIX 2007 , l'evento che si terrà la prossima settimana a Segrate in Microsoft:
http://remixitalia.spaces.live.com/
Dovrebbero esserci anche in futuro contenuti interessanti per il mondo .NET, WPF, SilverLight, Web 2.0, ecc.
Dategli uno sguardo ...
Giovedì sera si è conclusa la DevLeap Conference 2007. Come sempre accade in queste situazioni, si vorrebbe sempre dare di più e si vorrebbe che non finisse mai così in fretta ...
Complessivamente sono soddisfatto, soprattutto del feedback avuto dalle persone e del livello di attenzione che è stato dimostrato dai partecipanti.
Per il prossimo anno ho già in mente alcune cose che potremmo migliorare, ma ci tengo che anche chi c'era dia il suo contributo con qualche feedback diretto (paolo@devleap.it) o indiretto tramita i commenti di questo blog.
Adesso, oltre a proseguire con i progetti software ai quali abbiamo iniziato a lavorare da un paio di mesi, mi metterò al lavoro anche per organizzare i prossimi eventi. In particolare sarò speaker a SQL Conference 2007 il prossimo mese e sono invece, insieme ad Igor, direttamente coinvolto nell'organizzazione di SharePoint Conference 2007, un evento nel quale credo davvero molto. Da questo venerdì il sito pubblico è attivo, con agenda ed elenco speaker, e le iscrizioni sono aperte ... fatevi sotto!
Rimando ad un post interessante che illustra un'estensione WCF che può effettivamente risultare utile in alcune circostanze, permettendo di validare secondo XSD e WSDL i messaggi in entrata e/o uscita da servizi WCF. Notate anche i commenti in fondo al post, dove giustamente l'autore evidenzia il fatto che un'estensione come questa aiuta nell'approccio contract-first "puro" dove il riferimento è l'XSD e il WSDL e non il codice .NET.
In questi ultimi giorni abbiamo rifinito gli ultimi dettagli per DevCon'07, parlo non solo di slide e demo, ma anche della parte organizzativa (materiale del partecipante, gadget, slide PDF, feedback form, blocchi, penne, pranzi, coffee break, ecc.).
Domani partiranno, alla volta dello StarHotel Business Palace di Milano dove si terrà la conferenza, ben 31 scatoloni di materiale ... domani pomeriggio inizieranno gli allestimenti e le prove tecniche (audio/video) e martedì mattina inizieranno i nostri 3gg più importanti dell'anno.
Ci vediamo a DevCon'07!
Dimenticavo: le iscrizioni si chiuderanno questa sera ... per chi avesse intenzione di venire, restano poche ore...