Un po’ ovunque è sconsigliato l’acquisto di spazio web windows per l’hosting del proprio web site su Aruba. Volendo provare un progetto basato sulla Web Client Software Factory ho deciso di acquistare lo spazio su aruba. Purtroppo ho scoperto che non è possibile usare questo pattern sull’hosting in questione.
L’hosting Aruba (così come molti altri) concedono un livello di protezione di tipo medio sui loro server, cosa che rende impossibile l’esecuzione di questo pattern. Viene generata una Security Exception. Exception Details: System.Security.SecurityException: That assembly does not allow partially trusted callers.
Il problema sembrerebbe aggirabile ricompilando gli assembly aggiungendo questa riga di codice [assembly:AllowPartiallyTrustedCallers], ma il team di sviluppo del famoso patter afferma che ciò non risolve la situazione. Al momento l’unica cosa da fare è votare la issue su codeplex in modo da portare all’attenzione degli sviluppatori questa problematica.
Il sistema migliore per sfruttare a pieno la web client software factory (WCSF), così come spiegato nella documentazione ufficiale, è utilizzare degli oggetti business. Fatto sta che in alcuni casi (per vari motivi) potrebbe risultarci utile utilizzare i DataSet e non degli business object. La mia intenzione, durante lo sviluppo di un web application project, era quella di utilizzare i dataset precedentemente “popolati” da alcune chiamate a stored procedures sul databse. Non sapendo esattamente come muovermi restando in linea con l’architettura della WCSF ho chiesto supporto su codeplex.
Dalla discussion è emerso che il miglior modo per implementare questa soluzione è quello di creare uno o più Foundational Module con il DataSet e successivamente esporre un servizio che permetta al resto dell’applicazione di utilizzare i dati.
Un esempio ben fatto è rappresentato da questo E-Commerce Catalog.

Il 21 settembre è stata rilasciata una nuova versione della Web Client Software Factory, versione di cui non è stato rilasciato un file di installazione. Per poterla utilizzare bisogna compilare il progetto Guidance Package, cosa che a me non ha funzionato. La nuova release ha rispetto alla vecchia il vantaggio di supportare AJAX, teconologia indispensabile per le applicazioni web al giorno d’oggi. Per chi, come me, non è riuscito ad installare la nuova versione esiste una soluzione alternativa: rendere la Web Client Software Factory June 2007 “AJAX enabled“.
Per fare ciò basterà creare un nuovo progestto ASP.NET AJAX e copiare nel web config della nostra WCSF le parti mancanti rispetto al web config del progetto appena creato. Per evitare di commettere errori per questa procedura consiglio vivamnete di seguire attentamente questo video.
Ringraziamento particolare per questa dritta va ad Antonio Menna
L’ErrorProvider: questo sconosciuto! Molti programmatori non conoscono questo strumento messo a disposizione da .NET. E ancora più spesso non sanno a quale evento o strumento associarlo. Una delle tante possibilità di utilizzo è quella di associare l’errorProvider ad una bindingSource. Facciamo subito un esempio. Abbiamo una bindingSource con una dataSource popolata da alcuni record (o anche da uno solo).
Il nostro scopo è quello di creare un’ “anagrafica”, cioè prevedere l’inserimento di nuovi record nel database e per far questo abbiamo trascinato sulla nostra form l’origine dati in modo da ottenere le varie textbox già “bindate“. Ipotizziamo di avere un campo di tipo intero, cosa succede se l’utente digita un testo? Essendo lo strumento (textbox in questo caso, ma vale lo stesso per tutti gli altri) collegato al bindingSource accadrà che il focus resterà bloccato sulla textbox finchè non inseriamo un intero (a meno che non cambiamo l’evento su cui si genera la validation sulla form, ma non è il notro caso). L’utente non viene avvisato in alcun mod di cosa stia accandendo, e qui entra il gioco l’errorProvider che se associato alla bindingSouce farà apparire vicino al controllo l’icona di alert con un testo che segnala l’errore! Bisogna fare molta attenzione, perchè l’errorProvider, o meglio la validazione, ci segnalerà esclusivamente l’errore di input non corretto nel campo, quindi è opportuno gestire separatamente tutti gli altri casi.
In questi giorni, sul progetto che occupa la maggior parte della mia giornata, mi sono imbrattuto nella combobox. Questo strumento puo essere associato a diverse origi dati, una di queste è un enum.
Immaginate di avere una combobox chiamata MyCmb. Ora create un oggetto come questo
public enum Animali { Leone, Zebra, Gazzella };
Di default Leone avrà come value 0, Zebra 1 e Gazzella 2. Per cambiare il valore di partenza con cui contare basta fare così:
public enum Animali { Leone = 10, Zebra, Gazzella };
Lo scopo è quello di popolare la nostra comboBox:
MyCmb.DataSource = System.Enum.GetValues(typeof(Animali));
Per accedere al valore selezionato invece si procede in questo modo:
int valore = ((int)Enum.Parse(typeof(Animali), MyCmb.SelectedValue.ToString(), true));

[avhamazon wishlist="3NHMODHRFICUY" asin="0470187573" linktype="pic" locale="US"]
Per creare un nuovo progetto aprire Visual Studio 2005 Professional e create un new project. Tra i vari tipi di progetto scegliete “Guidance Packages” e poi “Smart Client Development May 2007“. Se tutto il necessario è stato installato correttamente dovrebbero apparire due nuovi modelli: Smart Client Application in C# e Smart Client Application in Visual Basic, come mostrato in questa immagine.

Non ci resta che definire il nome del progetto e il suo percorso. A questo punto una nuova winform del wizard di creazione progetto sarà visibile:

Qui definiamo il NameSpace e il percorso delle libreire necessarie che in genere è C:\Programmi\Microsoft Smart Client Factory\Lib\

[avhamazon wishlist="3NHMODHRFICUY" asin="1590599551" linktype="pic" locale="US"]