giovedì, gennaio 25, 2007

Lezioni di .Net 3.0

Ripropongo da questo blog Microsoft il link ad una serie di lezioni pratiche su .Net 3.0, in pratica diversi post che affrontano con dei tutorial le diverse tecnologie WPF, WCF (la mia preferita) e WWF (o WF). 

lunedì, gennaio 08, 2007

Il deployment di un servizio WCF senza usare IIS

Spesso si ospitano dei servizi Windows Communication Foundation (WCF) in IIS ma non è l'unico modo per esporli ai client. Un qualsiasi applicativo di tipo console o anche una semplice applicazione Windows Forms possono ospitare dei servizi e ci sono alcuni casi in cui questa opzione non è poi così assurda come potrebbe sembrare.

Una alternativa host per WCF propriamente confrontabile con IIS è un servizio di Windows, capace di partire in modo automatico/unattended all'avvio del sistema e pensato per operare 24x7.

In questo post racconto la mia esperienza di deployment di un servizio Windows. Questi sono i passi che ho seguito:

  • Registrare il certificato se, come me, avete scelto di implementare un servizio che usa:
    • sicurezza a livello di messagio
    • credenziali di sicurezza UserName
    • un validatore custom per le credenziali
  • Registrazione namespace
  • MSMQ, privilegi di accesso e registrazione certificati

Certificato
Il certificato, pubblicamente verificabile ed emesso da una Certification Authority (CA), può essere registrato nel server usando l'add-in Certificate in una console MMC. Lanciare mmc.exe, menu File, voce Add/Remove Snap-in, aggiungere Certificate, selezionare quale certificate store gestire.
Nel mio caso ho scelto di registrare il certificato a livello di computer account, tra i Trusted Publishers. Questa impostazione deve coincidere con quanto riportato nella configurazione del servizio WCF.

Il certificato viene utilizzato dal servizio WCF per gestire la crittografia delle comunicazioni client-server e quindi l'account con cui viene eseguito il servizio Windows deve avere accesso alla chiave privata.
Il servizio Windows può utilizzare un qualsiasi account predefinito, come LocalSystem, o del dominio. Nel mio caso ho deciso di creare un account di dominio specifico per il servizio WCF, al fine di controllare facilmente i privilegi di accesso alle diverse risorse del dominio.
WinHttpCertCfg.exe (MSDN e Support) è uno strumento da linea di comando per verificare e concedere l'accesso al certificato.

Nel mio scenario ho eseguito questo comando per verificare gli account che hanno già accesso alla chiave:

winhttpcertcfg -l -c LOCAL_MACHINE\TrustedPublisher -s <nome certificato>

Questo comando invece per assegnarlo all'utente desiderato :

winhttpcertcfg -g -c LOCAL_MACHINE\TrustedPublisher -s <nome certificato> -a <dominio>\<utente>

Namespace
Probabilmente il servizio WCF da esporre ha degli endpoint con binding http e se il sistema server è Windows 2003 Server SP1, Windows Vista o Windows XP SP2 è necessario avere a che fare con HTTP.SYS. Rimando a questo articolo per i dettagli su HTTP.SYS.
Per quanto ci interessa ai fini di WCF, solo gli amministratori hanno il diritto di registrare un namespace arbitrario, senza previa autorizzazione, mentre l'account che si usa per il servizio Windows non ha privilegi così elevati.

Per registrare il namespace si utilizza lo strumento da linea di comando HttpCfg.exe (MSDN), già presente in XP SP2, installabile con i support tools in Windows Server 2003.

Il problema di HttpCfg.exe, per chi è allergico agli strumenti da riga di comando, è la complessità dei parametri. Dominick Baier ha realizzato HttpSysCfg.exe, un utilissimo strumento che semplifica le operazioni.

Nel mio caso ho selezionato l'account per il servizio Windows ed ho aggiunto l'URI del servizio, nella forma:

http://+:<porta>/<TuaApplicazione>

L'URI è diverso da un caso all'altro. Lo strumento ha bisogno di HttpCfg.exe per funzionare. Per i dettagli si vedano questo post e anche questo.

Su Vista non è presente il tool HttpCfg.exe e si utilizza il comando netsh.exe per configurare HTTP. Si può anche installare HttpCfg.exe ma per la registrazione del namespace netsh.exe è altrettanto "semplice". Con netsh.exe il comando avrà una sintassi di questo tipo:

netsh http add urlacl http://+:<porta>/<TuaApplicazione> user=<utente>

MSMQ
Nel mio scenario ci sono anche degli enpoint con binding msmq (molto interessante). Si deve verificare che all'account del servizio Windows siano concessi i privilegi necessari per accedere propriamente alla coda.

Uilizzando MSMQ ho anche incontrato un errore inatteso. Quando il servizio WCF tentava l'accesso alla coda per inserire un messaggio, riceveva una eccezione del tipo: "No internal Message Queuing certificate exists for the user".

Per risolvere il problema e non perdere troppo tempo ho preferito usare le maniere forti. Ho lanciato MMC utilizzando (RunAs) l'account per il servizio Windows, ho apero lo strumento di amministrazione di MSMQ (Computer Management) ed ho registrato lo user certificate (Technet). Immagino ci siano altri modi per affrontare il problema.

Conclusione
Avendo iniziato ad usare WCF nel 2003, mi lascia abbastanza perplesso la mancanza di strumenti amministrativi visuali in grado di coprire queste semplici esigenze. I tool di integrazione di WCF in Visual Studio 2005 non sono ancora giunti alla versione definitiva e potrebbe spuntare qualcosa di nuovo nelle prossime settimane (o mesi).
Immagino che tutto quanto ho descritto si possa realizzare con delle custom actions nel setup del servizio Windows ma nel mio scenario sarebbe stato un overkill.

Ovviamente ho raccontato la mia personale esperienza, ho tralasciato molti dettagli e sottinteso alcuni concetti di WCF. Per maggiori informazioni su WCF questo è un ottimo punto di partenza.

giovedì, dicembre 21, 2006

ClickOnce

Dopo aver provato le laboriose proposte delle varie Enterprise Library, ecco finalmente la vera panacea (o quasi...): ClickOnce - da incrociarsi con la nuova gestione dei Settings di .NET 2.0!

  • FAQ: Tutte le domande che vi vengono in mente (con le risposte :-))
  • MSDN1 e MSDN2: come si fa a deployare con ClickOnce
  • CodeProject: e come si fa senza VS2005
  • CodeProject e MSDN: come usare i Settings
  • MSDN: usare Mage.exe per generare i deploy a manina
  • MSDN: deploy a manina di applicazioni clickoncenabled
  • MSDN: Tutto su ClickOnce
  • MSDN: Riassunto
  • MSDN: Trusted Publisher

    !!! Se avete problemi col deploy Clickonce via Internet ecco la soluzione: da Codeproject !!!

Namespaces in C# 2.0

Può esservi capitato di andare in confusione con lo scope di qualche Type Name a causa di come erano gestiti i Namespaces in .NET 1.1, ma adesso C# 2.0 ha apportato qualche utile novità: leggete questo semplice articolo tratto da CodeProject.

mercoledì, dicembre 13, 2006

PDC 2007!!!

Da un post di Brad Adams leggo l'annuncio della data e location della prossima Professional Developer Conference, prevista per l'Ottobre 2007 a Los Angeles.
Manca ancora un po' di tempo ma è bene pensarci su, avendo partecipato alla edizione 2000, 2003 e 2005 posso confermare per esperienza personale che sono eventi che valgono ogni singolo centesimo.

lunedì, dicembre 11, 2006

Smart Pos.Net featured on showcase.netfx3.com

Il nostro prodotto "Smart Pos.Net", realizzato da BEDIN Shop Systems utilizzando Windows Communication Foundation di .Net 3.0 è da oggi segnalato su http://showcase.netfx3.com.
Abbiamo anche realizzato un video che presenta il prodotto e mostra la modalità d'uso e gli scenari di implementazione, probabilmente verrà messo online sul sito http://showcase.netfx3.com prossimamente.

"Smart Pos.Net" è parte di una suite di smart client e servizi web per il commercio al dettaglio. Per ora non è disponibile una versione demo, appena sarà offerto in modalità di prova segnalerò il link.

Smart Pos.Net
BEDIN Shop Systems

Spedire Mail con .NET 2.0

Ecco una FAQ completa sul namespace System.Net.Mail; ecco inoltre alcuni esempi anche con System.Web.Mail da Codeproject.

martedì, dicembre 05, 2006

Validazione Controlli in Windows Forms

Ecco degli articoli che spiegano come automatizzare i controlli di validazione nelle Form del Framework:

Transazioni e Error Handling in SQL Server

Ecco alcuni articoli su come gestire transazioni in SQL Server e come gestire gli errori.

Inoltre ecco due interessanti e dettagliati articoli di Erland Sommarskog:

lunedì, novembre 27, 2006

Transazioni Distribuite

Ecco un interessante articolo per capire in maniera più approfondita come gestire transazioni distribuite: DataPoints da MSDN


E per rimanere in ambito SSIS:

sabato, novembre 18, 2006

Connection Pooling

Simpaticamente il nuovo ADO.NET oltre ad altre cose molto carine che ci permettono di astrarre dal .NET provider in uso, ci offre nuove vie per gestire i pool di connessioni (ClearAllPools e ClearPool ad esempio per pulire il connection pools per un dato provider, oppure il connection pool associato ad una specifica connection)
http://msdn2.microsoft.com/en-us/library/8xx3tyca.aspx

Interessante articolo di Codeproject.

How to quick Start: GotDotNet How To...

giovedì, settembre 14, 2006

Web Service Enhancements

Ecco una serie di link interessanti sui webservices e sulle alternative disponibili sul .NET Framework 1.1

P.S: se mai servisse un tool per lavorare con ste cose: MS WebDeveloper Express

C#: lavorare con le immagini

Ecco una serie di links che messi assieme possono aiutare a costruire un tool per gestire immagini e per elaborarle accedendo anche ai Tag EXIF.

giovedì, settembre 07, 2006

Una volta c'era NDoc, ma ora...

c'è SandCastle per costruire documentazione in ambiente .NET 2005:

venerdì, luglio 21, 2006

Guidance Explorer

Proprio stasera mi sono concesso un pò di tempo per dare un'occhiata al Guidance Explorer: dovrebbe essere una panacea contenente le linee guida (secondo standards Microsoft Patterns & Practices) per lo sviluppo architetturale delle proprie applicazioni.
Beh, francamente sono un pò deluso... in un progetto reale non lo vedo di facile uso... è vero che è innovativo rispetto a FxCop i cui suggerimenti sono a posteriori, ma non ne riesco a vedere la comodità.
Appena aperto, però, mi sono messo a leggere alcune guidance molto interessanti ed ho cominciato poi a perdermi nei meandri della documentazione rinfrescandomi le nozioni e imparando un paio di concetti nuovi. Ecco perchè secondo me è un ottimo learning tool ma l'obbiettivo di guidare la progettazione o lo sviluppo mi sembra ancora lontano. Il fatto di poter invece scrivere le proprie guidance direi che è molto importante e potrebbe eleggere questo tool ad essere usato all'interno di un ristretto Team per le proprie linee guida da seguire.
Voi che dite?

martedì, luglio 18, 2006

Disponibile la July CTP di WCF

Da poco è disponibile la CTP di luglio di .Net 3.0, che comprende WCF. In questo post Tom Archer spiega cosa è contenuto in questa CTP: se volete/dovete svilupparci sopra gli strumenti di integrazione per Visual Studio "Orcas" mancano da questa CTP. Quindi continuo a lavorare sulla June CTP, che per me era già abbastanza nuova e libera da bug bloccanti.

Stiamo lavorando a pieno regime su WCF (vorrei continuare a chiamarlo "Indigo" ma ci si deve abituare) ed i giorni di laboratorio con Clemens Vasters si stanno dimostrando sempre più utili. Rimane solo da sperare che Vista non ritardi troppo, tirandosi dietro .Net 3.0 a cui è legato.

giovedì, luglio 06, 2006

Mutex vs. GetProcessesByName

Vi siete mai accorti che se volete fare un'applicazione single-instance e decidete di usare GetProcessesByName potete imbattervi in qualche problemuccio (leggi: l'applicativo nun parte chiù)?!?
No?!? Bhè ve lo assicuro! Dato che se vi trovate qualche chiave "DisablePerformanceCounter" settata a 1 in giro per il vostro registry, oppure avete dei limiti sui diritti dell'utente e ACL varie...

Io preferisco i mutex e qui c'è un esempio che vi può essere utile:

Caricare Assembly a RunTime

Ho avuto modo di smazzularmi un pò con Assembly.Load e Assembly.LoadFrom...
...bhè ho avuto qualche problemino, ma alcuni interessanti links mi hanno aiutato a venirne fuori...
Ve li propongo, non si sa mai!

e ricordatevi di quell'area sconosciuta della CAG che si chiama Assembly Downlad Cache, molto utile in questo genere di RunTime Loading, che potete miracolosamente esplorare con "gacutil.exe /ldl" e ripulire con "gacutil.exe /cdl".

lunedì, giugno 26, 2006

WCF a Manchester con Clemens Vasters

Sto passando questi due giorni a Manchester, UK, per l'evento chiamato "WCF Deep Dive", in pratica si tratta di due giorni chiuso in un ufficio a discutere su come implementare Indigo (WCF) all'interno della tua applicazione con un membro del team di Indigo .
Questa mattina quando Craig McMurtry mi ha comunicato il nome della persona che mi avrebbe seguito ero sicuro di avere capito male. Quando il team member di Indigo è entrato in ufficio e si è presentato mi sono detto che probabilmente ci sono altre persone di origine tedesca con nome simile che lavorano nel team. Alla fine mi sono arreso e gli ho chiesto se era proprio il Clemens Vasters noto a tutti.
Ottenere dei consigli da una persona che fa parte del team di Indigo di così alto livello è qualcosa di unico che solo Microsoft sa fornire.
E poi oggi Clemens ha scritto in VB.Net visto che io lo preferisco...

martedì, aprile 04, 2006

Perchè si tende a procrastinare

Interessante spiegazione del comune comportamento per cui si tende a posticipare o rimandare un task...ad esempio: "Longhorn sarà basato su WinFS" poi "Longhorn, privo di WinFS, sarà rilasciato entro il primo quarto del 2006" ed infine "Windows Vista ha subito un lieve ritardo e sarà rilasciato i primi del 2007"...chissà quale sarà la prossima.

read more digg story


Powered by Qumana