martedì, maggio 15, 2007

Pat Helland is back

Pat Helland è una delle personalità più influenti nel campo della gestione delle transazioni e dei database in Microsoft. Credo di avere letto per la prima volta qualcosa di suo ai tempi di MTS 1.0, molti anni fa.

Dopo avere lasciato Microsoft per due anni passando ad Amazon.com è tornato in Microsoft. Sicuramente una bella notizia in un periodo in cui sono frequenti le notizie della dipartita di personalità di rilievo da Microsoft.

martedì, aprile 10, 2007

WCF Post Action Report

Lo scorso venerdì 6 aprile ho avuto l'occasione di presentare Windows Communication Foundation all'interno del ciclo di meeting di XeDotNet.org sul framework .Net 3.0.

Una esperienza interessante anche se sono molto più felice ora che è passata. Grazie a tutti per l'incoraggiamento e sono soddisfatto di avere riscontrato l'apprezzamento dei presenti (almeno fino a quando non vedrò i risultati dei feedback).

Forse ripeterò l'esperienza in futuro, per ora sono contento di avere dato il mio piccolo contributo al gruppo XeDotNet.org che continua a crescere. Il ciclo di meeting su .Net 3.0 è molto interessante e vi consiglio di partecipare alle prossime riunioni.

venerdì, aprile 06, 2007

Una visita guidata a WPF

Windows Presentation Foundation con XAML (eXtensible Application Markup Language)  per la gestione delle nuove esperienze UI in WIndows:

WMI: Who am I?

Se non lo conoscete eccovi un paio di dritte per introdurvelo:

Reflection: esempi per capire

Ecco un paio di esempi di come usare le reflection nell'analizzare oggetti .NET:

Come usare i Property Grid

Articoletto veloce veloce per capire come utilizzare ed estendere i PropertyGrid (da CodeProject ).

martedì, marzo 20, 2007

Windows Communication Foundation a XeDotNet

Durante il prossimo meeting di XeDotNet.org del 6 aprile terrò una sessione su Windows Communication Foundation.

Se siete interessati ad una introduzione e qualche approfondimento su WCF, iscrivetevi.

L'evento si tiene a Mestre, nella sede ACLI di via Girolamo Ulloa. Se arrivate in treno, la sede si trova all'uscita del sottopassaggio della stazione che porta anche ai binari. 
Per la mappa per giungere al luogo dell'incontro cliccare qui.

L'iscrizione all'evento è gestita direttamente da Microsoft. Questo è il collegamento alla pagina di registrazione.

venerdì, febbraio 16, 2007

Global knoledge resources

Un link con un sacco di info a proposito di un sacco di cose (sempre IT, ovviamente)

SQL: @@IDENTITY, forse abusata

Sapevate che @@IDENTITY ha delle sorelle meno conosciute, ma a volte più utili della stessa?
Ebbene si: esistono SCOPE_IDENTITY() e IDENT_CURRENT('table_name').

Valutate bene quando usarle...

Alcuni link in proposito:

Grazie Maxmost

mercoledì, febbraio 14, 2007

SQL: Table variables vs. Temporary table

Table Variables.... io non le avevo mai usate, ma adesso, nei giusti casi... le userò di certo:

T-SQL: Cursori in output

Mi sono trovato a dover scrivere sta robba e ne è venuta fuori un utile procedura per l'esecuzione di comandi SQL dinamici (supporta anche parametrizzazione).
Può essere un punto di partenza per cosine più complesse.

CREATE PROCEDURE dbo.GenericCursor
@genericCursor CURSOR VARYING OUTPUT
, @CMD Nvarchar(1024)
AS
BEGIN
DECLARE @CMDx Nvarchar(1024);
SET @CMDx = 'SET @genericCursor = CURSOR FORWARD_ONLY STATIC FOR ' + @CMD + '; OPEN @genericCursor;'
exec sp_executesql @CMDx,
N'@genericCursor cursor output',
@genericCursor out
END



CREATE PROCEDURE testGenericCursor
AS
BEGIN
DECLARE @MyCursor CURSOR;
DECLARE @name as varchar(100);
DECLARE @CMDx Nvarchar(1024);
SET @CMDx = 'SELECT TOP 50 name FROM dbo.sysobjects;'
EXEC dbo.GenericCursor @MyCursor OUTPUT, @CMDx;
FETCH NEXT FROM @MyCursor INTO @name;
WHILE (@@FETCH_STATUS = 0)
BEGIN;
FETCH NEXT FROM @MyCursor INTO @name;
SELECT @name
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
END


EXEC dbo.testGenericCursor

martedì, febbraio 13, 2007

Expresso: Regular Expression

Un buon tool per l'uso e abuso delle RegExp è secondo me Expresso:

In generale sulle Regular Expressions:

Percorsi formativi in .NET

Una serie di utili links a guide sul percorso formativo in ambito .NET

L'architetto del software

Una nostra vecchia conoscenza del corso MCSD spiga in questo racconto chi è l'architetto nel mondo del software.
Simpatico.

NHibernate: Hibernate per .NET

NHibernate è un porting del nucleo di Hibernate per Java sul framework di .NET.
Gestisce la persistenza degli oggetti in .NET su una base di dati relazionale.
Data una descrizione XML delle entità e relazioni, NHibernate genera automaticamente il codice SQL per caricamento e memorizzazione degli oggetti.
Facoltativamente, si può descrivere i meta dati di tracciato con gli attributi nel codice sorgente.

lunedì, febbraio 12, 2007

C# ereditarietà multipla

Per aggirare la single inheritance (ereditarietà da una sola classe base, ma da n interfacce) sono possibili alcune vie in C# 2.0, più o meno semplici... vediamo come:

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.