gennaio 2006 Blog Posts
Il branching è una funzionalità estremamente interessante del nuovo Source control targato Microsoft, ma pone problematiche di non poco conto per chi lo deve usare.
Questo post aiuta a capire una delle tante vie...
Guardando le varie versioni di Visual Studio Team System mi chiedo perchè dovrei scegliere la versione developer ! Sinceramente, se acquisto un banalissimo profiler .NET (ne trovo anche gratis anche se non integrati in VS.NET), perchè dovrei rinunciare agli innumerevoli strumenti di testing disponibili nella versione Team Test ?
Mi sto sempre più convincendo che la version Team Test è la più interessante delle tre.
Uno dei nuovi (rispetto alla versione 2000) data source di Reporting Services 2005 è proprio l'XML. L'XML erogato sia attraverso web services ASP.NET (quindi stream SOAP) che su stream XML.
Ecco allora che mi è venuto in mente che in WCF è possibile implementare alcune estensioni che permattano di erogare facilmente servizi in modalità POX/REST. Come ? Beh, Clemens ha fatto molto (ma molto) di più. nelle prossime settimane scriverò un piccolo esempio di servizio per agevolare il lavoro a Reporting Services 2005.
L'inizio del 2006 è caratterizzato da una serie imponente di webcast decicati a Visual Studio 2005, Visual Studio 2005 Team System ed all'architecture.
Per avere la lista completa vi consiglio queso link e quest'altro.
Come molti altri illustri colleghi, farò anch'io un paio di webcast:
Introduzione alla metodologia agile MSF 4.0 con Visual Studio 2005 Teammartedì 21 febbraio dalle 14:30 alle 16:00
Progettare il Web Testing nel mondo Enterprise con Visual Studio 2005 Team Testmartedì 28 febbraio dalle 14:30 alle 16:00Per chi ci sarà, a presto :-)
Prima nacque windowsworkflow.net, poi venne windowscommunication.net ... ma windowspresentation.net dov'è ?
Il CLR è indubbiamente ricco, ma a volte mi chiedo come mai Microsoft non completi, una volte per tutte, il type system con funzionalità banali ma sempre molto utili.
Prendiamo il BigDecimal di Java. Ci sono due funzionalità interessanti (fra le altre cose):
E' possibile definire la scala
E' possibile definire la regola di arrotondamento
Mi piacerebbe anche avere un maggior supporto dalla classe DateTime, ma questa è un'altra storia !
Spero sempre nella prossima versione....
Avete mai sentito parlare di security token e security token service ?
Bene, la spiegazione (un pò rozza, ma funziona !) è semplice. Quando abbiamo definito delle claims, ci serve un modo per impachettarle e spedirle. Il pachettino si chiama security token, mentre il servizio che le spedisce si chiama security token service. Semplice no ?
Tutto l'impianto di sicurezza di WCF si basa sul concetto di claim. Partiamo quindi dalla definizione di Claim: "An assertion of the truth of something, typically one which is disputed or in doubt."
Possiamo allora pensare ad una claim come il numero della nostra carta d'identità, il numero della patente, la nostra data di nascita, la nostra user name di dominio ecc ecc. Un insieme di claims possono quindi identificarci univocamente oppure classificarci (es. siamo maggiorenni).
La classe System.Security.Authorization.Claim fornisce un set di claims predefiniti, come il Dns (CreateDnsClaim) il SID windows (CreateWindowsSidClaim) e così via. Per ogni claim abbiamo 3 proprietà:...
Molto spesso capita di sentire domande del tipo: "il mio servizio impiega molto tempo ad eseguirsi e spesso la chiamata va in timeout. Come posso risolvere il probema ?" In WCF òa soluzione potrebbe essere quella di utilizzare il duplex service contract. Dico potrebbe perchè non è l'unica soluzione !
Il message pattern duplex è concettualmente semplice. Definisco un contratto per la chiamata e un'altro per la callback. Lato servizio avremmo quindi una cosa del tipo:
[ServiceContract(CallbackContract = typeof(IContractCallBack))]public interface IContract{ [OperationContract(IsOneWay=true)] void SubmitContract(string contractNumber);}
[ServiceContract()]public interface IContractCallBack{ [OperationContract(IsOneWay = true)] void ContractStatus(string contractNumber, bool isSubmitted);}
public class ContractService : IContract{ IContractCallBack callback;
public...
Come sviluppatore web molto spesso guardo i siti altrui e prendo spunto sulla tecnica adottata per raggiungere determinati effetti. Infatti ho sempre pensato che noi (sviluppatori) non creiamo ma trasformiamo :-)
Capire come sono stati raggiunti determinati risultati visual con il web significa capire che cosa sta dietro il codice html, javascript, css, .... Firefox fornisce un'estensione molto interessante per lo sviluppatore.
SOA si basa essenzialmente su 4 principi fondamentali (Policy-Based Behavior Negotiation, Explicitness of Boundaries, Autonomy e Contract Exchange). All'interno di questi punti si cela il problema dell'identificazione delle entità fra i servizi 8senza ovviamente richiedere la duplicazione delle informazioni).
Vediamo un esempio concreto. Immaginiamo di avere un servizio dei contatti ed un al'tro di processazione ordini. Si immagina pertanto che il servizio degli ordini abbia in qualche modo un riferimento alle informazioni dei clienti (contatti). Ma quale informazione ?
Basterebbe avere un identificativo univoco, che permetta al servizio degli ordini di cercare puntualmente un determinato cliente. Se andiamo a guardare come censiamo...
WCF permette di hostare i servizi in 3 tipi di applicazioni:
IIS (solo protocollo HTTP)
Applicazione Windows (Windows Services, Win Form, Console)
WAS (Web Service Activation) - aka IIS 7
Un interessante blog di uno degli sviluppatori del team spiega le tre alternative.
Ho appena ricevuto la conferma che da ieri faccio parte del local speaker registry di INETA. Questa cosa mi fa veramente molto piacere, come potete ben immaginare :-)
Sapere poi che l'Italia è rappresentata da Andrea ("Sua Maestà") e Lorenzo ("Human blog") non può che essere motivo orgoglio.
MSMQ 4.0 propone delle interessanti novità:
Transactional remote receive
Poison message handling
Subqueues
Continuo a pensare che MSMQ sia uno dei miglior servizi di Windows e queste nuove funzionalità non fanno altro che potenziarlo.
Durante le feste natalizie ho dedicato un pò di tempo a girovagare per siti internet (non pensate male !!!). Ad un certo punto ho posta l'attenzione alla logica di navigazione della login, e razionalizzando, ho trovato tre forme comuni (ce ne sono molte altre ma parevano minoritarie):
L'home page piena di contenuti contiene anche la maschera di login per l'area riservata
L'home page con la sola maschera di login
L'home page che richiede l'autenticazione e se mancante ridirige verso una pagina di login
Nella nostra (aziendale) ultima creatura abbiamo scelto l'opzione 2, anche se forse, non mi convince più di tanto. Su alcuni siti...
Premesso che parlare di performance su un prodotto non ancora uscito potrebbe avere poco senso, è vero però che il tema fa comunque parte del ciclo di sviluppo del prodotto stesso.
Quindi, qualcuno in Microsoft ha pensato bene di pubblicare dei dati (e codice degli esempi) di comparazione fra un servizio ASP.NET 2.0 e un servizio WCF. Il risultato è molto interessante.
Parlando con Corrado (il nostro guru delle applicazioni windows) in merito e Windows Presentation Foundation siamo convenuti che le nuove API, oltre a cambiare il modello di programmazione cambierà (o si presta a farlo) anche il modo di intendere la usabilità.
Già Office 12, Windows Vista stanno facendo un passo ulteriore, di semplificazione ed ergonomia, ma molto dipenderà dagli sviluppatori. Bisognerà fare uno sforzo e pensare di più all'usabilità, soprattutto nei dettagli. Perchè allora non iniziare a studiare come i maestri della usabilità pensano ?
Implementare una applicazione che supporti pienamente la globalizzazione è un esercizio abbastanza complesso. E' vero che il framework .NET ci supporta moltissimo, ma purtroppo ancora molte aree rimangono scoperte, come: la formattazione dell'indirizzo, numeri di telefono e così via.
Un buon punto di partenza per capire le problematiche ed eventuali soluzioni è il seguente sito.
Dopo molto tempo, e parecchie richieste, finalmente è nato il forum dedicato alle architetture :-)
E' uscita la prima beta degli addin WCF per Visual Studio 2005. Con questi addin è possibile fare due cose:
Generare il codice della classe proxy e la configurazione del .config
Generare il codice di testing (NUnit), il contratto e la configurazione
Per i dettagli ed il download clicca qui. Ogni commento, suggerimento, notifica errori è benvenuto :-)
REST è praticamente un modo diverso di intendere servizi web (un giorno ne parlerò più compiutamente).
Il concetto alla base di REST è molto semplice: il servizio è erogato su protocollo HTTP con un body interamente XML (non SOAP) e che sfrutta i verbi standard dell'HTTP: GET, PUT, POST e DELETE. Pertanto, se vogliamo informazioni su un contatto potremmo banalmente fare una GET all'URL http://www.miosito.com/servizio/contatti/352453.
Una domanda interessante è quella di sapere se è possibile utilizzare un framework service oriented per implementare REST oppure bisogne scendere a basso livello implementandosi modules o handler per ASP.NET. Clemens (http://staff.newtelligence.net/clemensv/) sta pubblicando una serie...
Per chi ha scaricato la CTP di dicembre 2005 di WCF avrà notato (forse) la mancanza del Data Contract Tool (dc.exe). bene, il tool è stato soppresso, ma non la sua funzionalità.
Infatti è stato sostituito da un comando di svcutil.exe, ed esattamente svcutil.exe /dconly
Michèle ha scritto un interessante (credo - non l'ho ancora letto tutto) articolo sui contratti in WCF.
Al prossimo workshop farò una sessione dedicata a WCF (Windows Communication Foundation). Dato che ho 1 ora e 15 min. mi stavo chiedendo se aveva più senso far vedere tante demo (e poco codice) che evidenzino le peculiarità di WCF oppure soffermarmi sui concetti base e far vedere molto codice.
Suggerimenti ?
Riporto AS IS il post che ritengo molto interessante per chi scrive applicazioni multi-threaded.
The Whidbey RTM implementation of Thread.GetData/Thread.SetData has several scalability issues caused by global locks being taken. The appdomain-global lock taken in LocalDataStore.SetData is one of them. There is another global lock taken in ThreadNative::GetDomainLocalStore that is even worse since it is process-global.The best workaround is to use [ThreadStatic] variables instead of Thread.GetData/Thread.SetData:
[ThreadStatic]
static Object foo;
[ThreadStatic] variables do not suffer from the contention issues. Moreover [ThreadStatic] variables are several times faster compared to Thread.GetData/Thread.SetData.