.Net 3.0
Premessa: ciò che scriverò è una banalità, ma secondo me in tanti non ne sono al corrente o non ci pensano. Di cosa parlo? Di cose del genere: public const int MyConst = 10;
Il danno potenziale che le costanti pubbliche possono creare alla stabilità delle nostre applicazioni è enorme.
Why? Perché le costanti non sono altro che placeholder risolti in fase di compilazione. Questo vuol dire che, finché non si ricompila, il valore non viene aggiornato.
Implicazioni?
Assembly A che definisce una costante MyConst = 10
Assembly B che referenzia Assembly A e ne utilizza MyConst
Assembly A cambia MyConst a 15
Finché non ricompilo...
Volevo lasciare un commento al post di Igor, poi ne è venuto fuori un papiro e allora è meglio scrivere qui. A mio modo di vedere, c'è un errore di fondo nel concetto di DTO espresso in quel post. Un DTO, infatti, *NON* deve né ereditare, né incapsulare l'oggetto che rappresenta; anzi... dirò di più: un DTO non deve avere alcuna relazione con l'entità (o le entità) di dominio che rappresenta, altrimenti non sarebbe un DTO!! Cerco di spiegare meglio il concetto. Perché creo ed espongo un DTO? Una delle ragioni può essere che non voglio/posso esporre direttamente una mia entity...
Windows Communication Foundation permette, in maniera estremamente semplice, di utilizzare tipi complessi sia come parametri di un servizio che come valori di ritorno: basta che essi siano marcati o con l'attributo DataContract o Serializable: [DataContract]
public class MyClass
{
// codice....
}
[ServiceContract]
public interface IMyService
{
[OperationContract]
string MyMethod(MyClass parameter);
}
Il comportamento di default di svcutil.exe, in fase di generazione del proxy per l'accesso al servizio da parte del client, è quello di creare una classe omonima di MyClass e con i medesimi membri pubblici. Nel caso in cui MyClass sia definita in un assembly referenziato sia dal...
In Windows Communication Foundation, il proxy creato da svcutil eredita dalla classe ClientBase<T>, che a sua volta implementa l'interfaccia IDisposable. Conseguenza di questo fatto è che viene naturale invocare il nostro bel servizio scrivendo: using (MyServiceClient client = new MyServiceClient())
{
// more code goes here...
}
Ma se l'invocazione genera un errore, cosa accade? L'utilizzo del blocco using ci garantisce che venga chiamato il metodo Dispose() di MyServiceClient, che, Reflector alla mano, non fa altro che invocarne il metodo Close().
Attenzione però all'eccezione rilanciata se lo stato del client è Faulted (accade ogni volta che si verifica un errore non...
Altro tip su WCF (giuro, è in buona fede, non partecipo a Community Credit, ehhehe!!) Una volta effettuato il deploy di un servizio WCF su IIS, ho purtroppo constatato che il file .svc veniva fornito in output come semplice plain text. Occhiata al metabase di IIS e, sorpresa... non era presente alcun binding tra questa estensione e ASP.NET. La causa è da ricercarsi in un bug dei primi installer di .NET 3.0 che creavano dei problemi alla configurazione di IIS. Per risolverli è sufficiente digitare, da prompt dei comandi, "%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" /s:W3SVC
Maggiori dettagli in questo post.
HTH.
Anche con le VS2005 Extension for WCF e WPF installate, può capitare che Visual Studio non mostri correttamente l'intellisense degli elementi di configurazione relativi a Windows Communication Foundation. Come risolvere? Se avete un luminare come Fabio Cozzolino tra i contact di MSN è un gioco da ragazzi, basta chiedere a lui! :D Altrimenti, eseguite nuovamente l'installazione delle estensioni, ma digitando msiexec /i vsextwfx.msi WRC_INSTALLED_OVERRIDE=1
da riga di comando!
In questi giorni in azienda ho iniziato ad utilizzare Windows Communication Foundation piuttosto intensamente e mi sono fatto un'idea di massima (ancora MOOOLTO grossolana) su questa parte del .Net FX 3.0. Mi piace parecchio il nuovo DataContractSerializer (AKA XmlFormatter), grazie al quale riusciamo ad avere oggetti lato client molto più simili alle controparti server side. Mi piace (ovviamente) la tanto decantata possibilità di creare servizi indipendenti dalla tecnologia utilizzata, anche se tutta da verificare nella pratica, mi piace il fatto che si possa personalizzare il formato dei messaggi scambiati tra client e server e che si possano creare metodi che lavorino direttamente...
In questo post dicevo che, per ciò che ho avuto modo di vedere, non immagino la tipica applicazione gestionale realizzata in WPF. Questa nuova tecnologia, secondo me, ha ben altri scopi, dato che "non di soli gestionali vive il programmatore", no? Ecco perché, a mio modo di vedere, forse il famoso Healthcare Prototype, che comunque ha lasciato tante bocche spalancate, è un esempio un po' fuorviante. Chi invece credo beneficerà alla grande delle peculiarità di WPF e ci farà toccare con mano cosa vuol dire avere a disposizione una tale potenza e flessibilità per la UI sono i software di...
Durante le festività natalizie, ho avuto modo di
papparmi un paio di centinaia di pagine del libro di Charles Petzold su WPF; per
il momento, ho toccato pochissimo (quasi nulla) XAML, dato che la prima metà del
libro non lo tratta. Questa scelta, che inizialmente mi aveva lasciato piuttosto
perplesso, è in realtà completamente giustificata: XAML altri non è che un modo
per serializzare una gerarchia di oggetti e quindi, alla fine dei conti, in WPF
riveste comunque il ruolo di "accessorio
", per quanto di fondamentale importanza; morale della favola: per studiare...
Dopo neanche una settimana dall'ordine (Amazon.co.uk tutta la vita, altro che shopping negli states), la mia simpatica postina ha lasciato nella cassetta delle lettere Applications = Code + Markup e questa sera ho dato una sbirciatina veloce al contenuto. Ora, premetto che è assolutamente presto per dare un giudizio, dato che ho guardato l'indice, sfogliato il libro qua e là e letto un paio di pagine, ma... La copertina rigida rullezza, e ci troviamo davanti un gran bel tomo da un migliaio di pagine circa Mi sembra scritto in maniera piuttosto semplice e chiara, almeno da quel poco (facciamo pure...
Full .Net 3.0 Archive