Codice e slide della sessione ASP.NET MVC 2.0

by Andrea 12 April 2010 02:27

Ecco disponibili al download, il codice e le slide dell'evento che ho tenuto il 9 Aprile 2010 su Microsoft ASP.NET MVC 2.0.

Per chi non avesse partecipato al community meeting, nel codice è presente una semplice ma completa applicazione, (ovviamente) realizzata in ASP.NET MVC 2.0, che permette la gestione e visualizzazione di news:

  • Pannello di controllo (utenti autenticati),
  • Inserimento, Modifica, Cancellazione News (utenti autenticati)
  • Visualizzazione lista news
  • Visualizzazione dettaglio news
  • Inserimento commenti nel dettaglio news

 

Tags: , , ,

.NET | ASP .NET | Microsoft | XeDotNet

Community Meeting - Web Track

by Andrea 07 April 2010 05:00

asp-net-mvc Venerdì 9 Aprile 2010 si terrà il consueto XeDotNet Community Meeting con la Web Track, che sarà tenuto da me e da Andrea Colaci (che terrà una sessione su ASP.NET 4.0).

Io invece, sarà a parlarvi di ASP.NET MVC 2.0:

ASP.NET MVC è un framework sviluppato da Microsoft che permette di sviluppare applicazioni web utilizzando il pattern Model-View-Controller. Questo pattern, e (in questa sessione) la sua implementazione realizzata da Microsoft, si propone di apportare alcuni benefici: Maggiore controllo del markup della pagina, URL più leggibili Facilità di integrazione con librerie AJAX, chiara separazione dei ruoli/responsabilità tra layer, facilitando i test e la manutenzione dell'applicazione, supporto per test-driven development.
Nella sessione andremo in dettaglio nella versione 2 di ASP.NET MVC, e con esempi pratici daremo risposta alle domande più frequenti, e a molte altre.
Quando si utilizza ASP.NET MVC?
Come si utilizza ASP.NET MVC?
Semplifica davvero la manutenzione dell'applicazione?
E' realmente testabile?
Cosa guadagno ad usare ASP.NET MVC?

Con molto stupore, mi sono reso conto di aver completato slide e codice nello scorso weekend, con ben 4 giorni di anticipo…cosa che credo non mi sia mai accaduto prima. :-D

Per registrarvi: http://www.xedotnet.org/nextmeetings.aspx

Tags: , , ,

XeDotNet | ASP .NET

Community Tour - Visual Studio 2010

by Andrea 07 April 2010 03:33

Giovedì 15 Aprile 2010 si terrà l'evento Community Tour - Visual Studio 2010, per il lancio della nuova versione di Visual Studio.
Il luogo dell'evento sarà:

Hotel Holiday Inn Venice
Rotonda Romea 1/2 
30175 Marghera (VE)

e ci terremo compagnia per un'intera giornata, piena zeppa di interessanti sessioni, che ci vedranno impegnati dalle 9.30 alle 18.15 con la seguente agenda:

  • 09:00 - Registrazione
  • 09:30 - Apertura Lavori e Keynote con Vittorio Bertocci
  • 10:20 - Vittorio Bertocci - Claims-based identity e Windows Identity Foundation
  • 11:25 - Sospensione
  • 11:40 - Davide Vernole - Microsoft Test Manager, mai più senza!
  • 12:45 - Lorenzo Barbieri - Introduzione allo sviluppo con Windows Phone 7 Series
  • 13:45 - Pausa Pranzo (a carico dei convenuti)
  • 14:45 - Andrea Boschin - Silverlight 4.0 Overview
  • 15:50 - Andrea Dottor - What's new in ASP.NET 4.0
  • 17:10 - Davide Senatore - WPF 4.0 – The Golden Age of Windows Client
  • 18:15 - Chiusura lavori

Agenda completa e abstract: Community Tour Visual Studio 2010
Registrazione: clicca qui

Vi aspettiamo numerosi!!

Tags: , , ,

XeDotNet | Microsoft | .NET | ASP .NET

Avviare un package di SSIS da un'applicazione ASP.NET

by Andrea 29 March 2010 07:22

SSIS Non so come mai, ma utlimamente mi scontro con problematiche non molto documentate. Una di queste è la possibilità di lanciare l'esecuzione di Package di SQL Server Integration Services da un'applicazione ASP.NET.

Cercando in rete, ho trovato solamente due possibili soluzioni, entrambe elencate in questo post. Una soluzione richiede la chiamata ad un job di SQL Server Agent, mentre l'altra soluzione fa uso di un Web Service da pubblicare nella macchina di SQL Server.

La prima soluzione l'ho scartata in quanto non sono riuscito a trovare il metodo per poter passare dei parametri utili a valorizzare le variabili del package (mia ignoranza). Mentre la seconda richiede di installare un'ulteriore applicazione (da dover poi mantenere e ripubblicare), nella macchina di SQL Server, e quindi anche questa scartata.
Può sembrare banale, ma avere un'applicazione in più da mantenere non è sempre semplice, specialmente nel caso l'applicazione sia distribuita in diversi server, e sia presente in casa di diversi clienti.

Guardando le diverse soluzioni, mi è venuta l'idea di provare a adattare la soluzione del Web Service, ma eseguita direttamente da un server remoto. Devo ammettere che ci sono state svariate problematiche, ma alla fine, sono arrivato ad una soluzione perfettamente funzionante.

Ecco come eseguire un package di SSIS da remoto:

Per l'esecuzione del package sarà necessario creare un utente nel database (oppure utilizzarne uno di esistente) ed assegnargli il ruolo db_dtsoperator nel database msdb. Questo ruolo attribuisce all'utente i permessi di:

  • Enumerate all packages.
  • View all packages.
  • Execute all packages.
  • Export all packages.
  • Execute all packages in SQL Server Agent.

Per quanto rigurda la connessione verso il database, nel web.config ho creato una ConnectionString che contiene solamente "Data Source", "User ID" e "Password", questo perchè poi tramite l'uso della classe DbConnectionStringBuilder, verrà poi parsata per recuperarne i singoli valori. Così ho un unico punto dove saranno contenute le credenziali di accesso.

   1: <add 
   2:   name="olapServerAuth"
   3:   connectionString="Data Source=192.168.0.100;User ID=usr;Password=p4$$w0rd;" 
   4:   providerName="System.Data.EntityClient" />

Nell'applicazione sarà necessario referenziare la dll Microsoft.SQLServer.ManagedDTS, e aggiungere alla classe uno using a Microsoft.SqlServer.Dts.Runtime.

Il codice per eseguire il package da remoto sarà il seguente:

   1: // recupero delle informazioni per l'autenticazione al server
   2: DbConnectionStringBuilder cs = new DbConnectionStringBuilder();
   3: cs.ConnectionString = ConfigurationManager.ConnectionStrings["olapServerAuth"].ConnectionString;
   4:  
   5: Application integrationServices = new Application();
   6: // recupero del package che deve essere presente in SQL Server
   7: Package package = integrationServices.LoadFromSqlServer(
   8:                         @"\Data Collector\Test\TestETL",
   9:                         cs["Data Source"] as string,
  10:                         cs["User ID"] as string,
  11:                         cs["Password"] as string,
  12:                         null);
  13:  
  14: // set delle variabili
  15: Variables variables = package.Variables;
  16: variables["VariabileDaSettare"].Value = valoreDaSettare;
  17:  
  18: // set delle connessioni
  19: Connections connections = package.Connections;
  20: connections["AdoNetAnalysisDatabase"].ConnectionString = ConfigurationManager.ConnectionStrings["AdoNetAnalysisDatabase"].ConnectionString;
  21:  
  22: // esecuzione del package
  23: DTSExecResult result = package.Execute(connections, variables, null, null, null);
  24: if (result != DTSExecResult.Success)
  25:     ... // errore nell'esecuzione
  26: else
  27:     ... // avvio corretto del package

Da notare che:

  • DbConnectionStringBuilder: permette di recuperare ogni singolo elemento che compone una ConnectionString. Utile in questo caso per salvare i dati del server di SQL Server, il nome dell'utente di accesso, e la relativa password in un unico container, e poterli poi recuperare singolarmente.
  • Application.LoadFromSqlServer: permette di recuperare un package presente in SQL Server. Se i campi username e password non vengono valorizzati, viene fatto uso della windows authentication.
  • package.Variables: recupero delle variabili utilizzate nel package. Utile nel caso sia necessario modificarne il valore di default prima dell'esecuzione.
  • package.Connections: recupero delle connessioni utilizzate nel package. Da notare che oltre alle stringhe di connessione, compaiono in questa lista anche le connessioni per i Flat File.
    In questi elementi devono essere presenti tutti i valori richiesti, come ad esempio nel caso di una connessione OLEDB dovranno essere presenti: Provider, Application Name e Auto Translate. (per facilità controllate come sono composte nel vostro package).
  • package.Execute: avvia l'esecuzione del package con le nuove variabili e connessioni impostate. 
  • In caso di non successo nell'esecuzione del package, in package.Errors saranno presenti gli errori.

Devo ammettere che ricostruire questo codice non è stato per niente facile, in quanto gli errori che mi si presentavano non erano proprio semplici da decifrare.
La maggiore difficoltà è stata nel capire che le connessioni dovevano riportare tutti i parametri (gli stessi che si possono vedere quando si esegue il package dal SQL Management Studio), ed infine anche il capire quali fossero i permessi minimi da dover dare all'utente per poter eseguire il tutto (per evitare problematiche di sicurezza).
Ma alla fine, tutto ha funzionato alla perfezione, e questo ripaga del tempo speso/investito in questa soluzione.

Tags: ,

SQL Server | ASP .NET | .NET

Codice e slide della sessione Write less do more...with jQuery

by Andrea 08 March 2010 01:35

Ecco disponibile per il download il codice e le slide della mia sessione "Write less do more...with jQuery" tenuta venerdì 5 Marzo 2010.

Tags: , ,

.NET | ASP .NET | Generale | XeDotNet

Prossimo evento - Rich Internet Applications Track

by Andrea 01 March 2010 02:00

Venerdì 5 Marzo 2010 ci sarà il community meeting "Rich Internet Applications Track" dove Andrea Boschin vi parlerà  di Silverlight 4.0, mentre il mio compito sarà quello di presentare jQuery, e il suo utilizzo con ASP.NET.

Silverlight 4.0 - Practical Overview

Il nuovo rilascio della recente beta di Silverlight 4.0 ha introdotto una serie di nuove feature che amplificano notevolmente le possibilità per lo sviluppatore. A partire dalle applicazioni Out of browser in full-trust, passando per il supporto a webcam e microfono, continuando con gli strumenti per la stampa e tutta una serie di interessanti novità, in questa sessione si vedranno le novità con una serie di esempi pratici calati su problematiche reali.

Write less do more...with jQuery

logo_jquery jQuery è un framework JavaScript che permette di semplificare la scrittura di codice JavaScript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e le funzionalità che offre, verificando se il motto "write less do more" sia vero o meno

Per l'iscrizione all'evento: registrazione

Tags: , , ,

ASP .NET | Internet

BlogEngine.NET 1.6.0 è stato rilasciato

by Andrea 02 February 2010 00:17

benlogo80 E' da molto che seguo questo progetto, e chi mi segue, sa che ne ho scritto una guida pubblicata su html.it (Guida BlogEngine.NET).
L'ultima release di questo engine risale alla versione 1.5.0 del 13 Aprile 2009 (veramente datata), ma per poter usufruire/conoscere/testare le varie funzionalità aggiunte a BlogEngine.NET, ho sempre tenuto aggiornato questo blog con l'ultima versione di sviluppo, e vi posso assicurare che ha fatto dei notevoli passa avanti.

E' con gran piacere che oggi apprendo (BlogEngine.NET 1.6.0 is Released)  che è stata rilasciata una nuova release, la 1.6.0, con parecchie novità.
Tra le più importanti troviamo l'inserimento di un filtro per i commenti, che di default viene fatto con le Akismet, ma anche con regole custom, e con la possibilità di svilupparsi dei proprio filtri.
Altra novità, che attendevo da molto è la presenza di una pagina per la moderazione/gestione dei commenti, evitando quindi di dover andare nelle pagine dei post.
Ma le novità non si fermano qui, ed ecco la lista completa:

  • Centralized Comment Management
  • Automated Comment Spam Filtering with ability to plug-in custom Filtering modules
  • Multiple Widget Zones
  • Referrers data and Blogroll items now stored in Database when using the DB blog provider.
  • Unsubscribe Link in Comment Notification Emails
  • Referrer Data can be Stored for more than 7 days.
  • Blogroll items can now be Ordered.
  • Newsletter Widget more Intelligent - Emails sent when a post is going from an Unpublished to Published state.
  • Twitter Widget - New options and improvements
  • Page Slugs now saved in Database.
  • New Logging system to Track events and errors.
  • Unhandled Exception Handling
  • Fixes to Comment Notification Emails not being sent out correctly in some cases.
  • Outgoing Email improvements
  • Many other improvements and fixes

Ecco quindi il link per il download di BlogEngine.NET 1.6.0: download

Technorati Tags:

Tags:

Sito | .NET | ASP .NET

Linq to Facebook

by Andrea 28 January 2010 08:07

LinqToFacebook Visto la mia scoperta a riguardo di Linq to Twitter, mi sono chiesto se qualcuno avesse anche scritto un provider LINQ per Facebook, ed ecco che sempre da codeplex spunta il progetto LINQ to FQL, un provider di LINQ che si interfaccia direttamente con le API di Facebook.

Un articolo a riguardo di questa libreria lo trovate a questo link su codeproject:
Facebook Developer Toolkit LINQ to FQL Addon
mentre direttamente su CodeRun trovate il codice disponibile per testare subito la libreria:
CodeRun - LINQ to Facebook

Ed ecco un esempio di sintassi:

   1: var db = new FacebookDataContext();
   2: //LINQ Query Syntax
   3: var myUser = from user in db.user where user.uid == db.uid select user;
   4: //LINQ Method Syntax (the same query)
   5: var myUser2 = db.user.Where(t => t.uid == db.uid);

Una cosa che non condivido a pieno di questa libreria, è l'aver mantenuto gli stessi nomi degli oggetti e proprietà utilizzati da Facebook, mentre io avrei preferito fossero stati rinominati con qualcosa di più leggibile/parlante (e che rispetti le Naming Convention). Capisco altresì che uno sviluppatore, in questo modo, può utilizzare la stessa documentazione delle API di Facebook per capirne il significato e l'utilità.

Technorati Tags:

Tags: , ,

.NET | ASP .NET | Internet

Codice e slide della sessione su ASP.NET Dynamic Data 4.0

by Andrea 28 January 2010 01:03

Con un bel pò di ritardo, ecco il materiale del community meeting che ho tenuto il 11 Dicembre 2009 riguardante ASP.NET Dynamic Data 4.0. Per qualsiasi domanda potete contattarmi, o cosa migliore, utilizzare il forum di ASP.NET italiano http://social.microsoft.com/Forums/it-IT/aspnetit/.

Per il download:
- codice (Visual Studio 2010 - ASP.NET 4.0): Codice Dynamic Data 4.0
- slide (Power Point 2010): Slide Dynamic Data 4.0

Nella sessione (e in un precedente post) avevo consigliato di seguire alcuni blog (del team di sviluppo e di MVP su ASP.NET), che contengono post veramente utili con soluzioni alle problematiche più ricorrenti, ma anche solo per tenervi aggiornati a riguardo delle prossime/nuove funzionalità.

Mentre, per alcune delle risorse/soluzioni viste durante la sessione, i link di interesse sono i seguenti (i sorgenti dei progetti che trovate a questi link sono compresi nel download del codice sorgente della sessione, ma ovviamente aggiornati a dicembre 2009):

Tags: , ,

XeDotNet | Microsoft | .NET | ASP .NET

Linq to Twitter

by Andrea 27 January 2010 06:36

LinqToTwitter Cercando una libreria per interfacciarmi con le API di Twitter, sono venuto a conoscenza di un provider per LINQ chiamato LINQ to Twitter, che esegue le chiamate verso il noto social network.
Questo provider permette quindi di tradurre una sintassi LINQ in una chiamata verso le API REST di Twitter, in modo del tutto trasparente, facilitando/velocizzando notevolmente le fasi di sviluppo (e aggiungerei anche, migliorando la lettura del codice).

Il progetto è disponibile a questo link: LINQ to Twitter

Un esempio di codice (completo di autenticazione semplice) è il seguente, dove andremo a recuperare gli ultimi tweets degli amici:

   1: var authorization = new UsernamePasswordSimpleAuthorization()
   2: {
   3:     UserName = ConfigurationManager.AppSettings["twitterConsumerKey"],
   4:     Password = ConfigurationManager.AppSettings["twitterConsumerSecret"]
   5: };
   6: authorization.SignOn();
   7:  
   8: using (TwitterContext tc = new TwitterContext(authorization))
   9: {
  10:     var publicTweets = (from tweet in tc.Status
  11:                         where tweet.Type == StatusType.Friends
  12:                         select tweet).ToList();
  13: }

Dando uno sguardo al codice, il progetto sembra davvero completo (a differenza di molte altre librerie che non vengono aggiornate dal 2007), e sopratutto, fornisce pieno accesso alle funzionalità di Twitter:

  • Status
  • User
  • Direct Messages
  • Friendship
  • Social Graph
  • Account
  • Twitter Search
  • Authentication

Technorati Tags:

Tags: ,

.NET | ASP .NET