Differenze tra web application e web site in Visual Studio

Ancora oggi mi capita spesso di trovare clienti che non conoscono la differenza tra un progetto di tipo Web Site ed uno di tipo Web Application in Visual Studio.

new-web-site

new-web-application

Web site project (WSP)

I progetti di tipo web site sono compilati dinamicamente. Sul web server vengono pubblicate tutte le pagine e i controlli con il markup ma anche tutti i sorgenti C#/VB.Net.

Ogni pagina è compilata la prima volta che viene richiesta e viene generata un’assembly per ogni file.

L’unico aspetto comodo dei web site è che è possibile seguire un ciclo di modifica tipico di un sito ASP classic in cui si modifica la pagina e la si pubblica senza dover ricompilare l’intero progetto.

Ovviamente in scenari anche minimamente complessi non è certamente questo il motivo per scegliere di sviluppare un progetto web site.

Tra l’altro la proliferazione di queste DLL combinata con l’eventuale frequente modifica dei namespace potrebbe causare errori di runtime.

I web site project hanno una cartella particolare App_Code in cui è possibile inserire direttamente delle classi C#/VB.Net. Anche queste devono essere copiate sul web server e vengono compilate dinamicamente.

Continuous integration e deploy

I web site non si integrano facilmente nei processi di Continuous Integration. Ad esempio un web site non consente di gestire gli eventi di pre e post build.

Il deploy viene effettuato tramite un normale XCopy oppure da Visual Studio sfruttando il tool Copy Web Site.

Copy-web-site

Web application project (WAP)

I progetti di tipo web application sono precompilati in un’unica DLL.

In questo caso il deploy riguarda le pagine ed i controlli con il markup ma non i file di code behind che vengono sostituiti dall’unica DLL nella cartella Bin.

Al contrario di un web site per pubblicare una modifica è necessario ricompilare l’intero progetto.

Continuous integration e deploy

La web application genera una normalissima assembly .Net semplificando il deploy ed il testing.

Anche il versioning risulta facilitato in quanto come ogni assembly contiene tra le altre le informazioni di Assembly Version e File Version.web-application-publish

Per effettuare il deploy si può usare lo strumento Publish di Visual Studio oppure creare un Deployment Package che può essere direttamente installato in IIS.

In entrambi i casi gli artefatti da mettere sul web server contengono esclusivamente pagine e controlli e le DLL delle cartella bin.

Tutti i file esclusi a livello di soluzione ed i sorgenti non vengono copiati/impacchettati.

Riassunto delle principali differenze

Web site Web application
Compilazione Dinamica, un’assembly per ogni singola pagina.
Effettuata la prima volta che viene richiesta la pagina o ad ogni modifica
Compilazione dell’intera web application e generazione di un’unica assembly
Deploy Deploy di pagine e controlli.
Deploy di tutti i file sorgenti di code behind
Deploy di pagine e controlli.
Deploy dell’assembly generata nella cartella bin
Strumenti di deploy Copy web site Publish
Build deployment package
Continuous Integration Non dispone di eventi di pre/post build Gestisce gli eventi di pre/post build
L’assembly contiene le informazioni di versione
Gestione file Tutti i file su file system sono obbligatoriamente compresi nel web site project Granulare:
– è possibile escludere dei file a livello di progetto in Visual Studio
– è possibile specificare quali file compilare/copiare/embeddare

Concludendo non esistono dubbi per me che la soluzione per ogni progetto che sia minimante più grande della gestione dei DVD di casa debba essere sviluppata tramite una web application.

Tra l’altro la compilazione in Visual Studio di un Web Site di una certa dimensione risulta molto più lenta di quella di una Web Application.

Può capitare di avere ancora dei vecchi progetti web site. Consiglio la lettura dell’articolo di Scott Guthrie che elenca gli step necessari per fare l’upgrade e le modifiche necessarie.

Riferimenti

ASP.NET: Web Site or Web Application?

Upgrading VS 2005 Web Site Projects to be VS 2005 Web Application Projects

Share

Gestire le virtual directory con IIS Express

Uno degli aspetti principali di IIS Express è la sua flessibilità e configurabilità al pari di IIS “completo”, e ben superiori a Cassini.

Una delle necessità più frequenti è quella di configurare una virtual directory (si pensi ad esempio ad una cartella images posizionata al di fuori del web site).

Per configurare le virtual directory in IIS Express è sufficiente modificare il file applicationhost.config che si trova nella cartella Users/<username>/IISExpress/Config.

All’interno della sezione sites individuare il sito in cui si vuole gestire la virtual directory e aggiungere una nuova application.

Ad esempio:

<site name="WebSiteWithVirtualDirectory" id="1">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:tempwebsite1" />
  </application>
  <application path="/Images" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="d:tempImages" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation="*:1132:localhost" />
  </bindings>
</site>

configura un sito su IIS Express in questo modo:

localhost:1132 -> punta alla cartella c:tempwebsite1

localhost:1132/Images -> punta alla cartella d:tempimages

Da notare che è possibile configurare sito e virtual directory in maniera completamente autonoma, ad esempio impostando diversi application pool.

Share

RequestValidation e RequestValidationMode in ASP.NET 4.0

Dalla versione 2.0 di Asp.Net a default è impossibile inserire del testo html nelle textbox per motivi di sicurezza, in particolare per evitare la script injection.

Cercando di inserire dei tag html in una form si ottiene un’eccezione di questo tipo:

A potentially dangerous Request.Form value was detected from the client

Tipicamente questo comportamento viene disabilitato in alcune aree del backoffice delle web application proprio per consentire l’inserimento di testo Html come ad esempio la descrizione estesa dei prodotti in un sito di commercio elettronico.

Per disabilitare la validazione è sufficiente impostare ValidateRequest a false all’interno della direttiva page.

Fin qui tutto normale.

Però migrando un progetto al framework 4.0 la validazione scatta nuovamente e si ottiene nuovamente lo YSOD.

Il problema si presenta in quanto la pipeline di validazione è stata modificata. Per ottenere nuovamente il comportamento del framework 2.0 è sufficiente settare il parametro requestValidationMode nel web.config:

<httpRuntime requestValidationMode=”2.0″ />

Ogni valore inferiore a 4.0 viene interpretato come 2.0.

Maggiori informazioni sul sito MSDN:

HttpRuntimeSection.RequestValidationMode Property

Share

Pubblicate le slide della sessione ASP.NET MVC 3 a SMAU

Ho pubblicato su slideshare la presentazione powerpoint della sessione che ho tenuto a SMAU business a Bologna il 9 giugno.

Oltre alle sessioni su Windows Phone (Lorenzo Barbieri di Microsoft) e HTML 5 (Alessandro Scardova di DotDotNet) ho annoiato la platea parlando di software engineering, di pattern di presentazione (Model View Controller) e più in dettaglio dell’implementazione Microsoft del pattern MVC su Asp.Net.

Incorporo qui la presentazione (altrimenti è raggiungibile da slideshare).

Asp.net MVC 3

Visualizza tutte le presentazioni di Stefano Benedetti su SlideShare







Share

Attivare i menù Add Controller e Add View di MVC in un progetto di tipo Web Application

Stò effettuando la migrazione della piattaforma di e-commerce all’architettura MVC 3.

Dato che è una modifica radicale stò procedendo per passi e la prima modifica è aggiungere lo scheletro di un’architettura MVC all’attuale progetto Web form.

In questo modo ho una struttura ibrida, il vecchio sito funziona completamente e posso piano piano modificare il layer di presentazione.

I primi passi sono:

  • aggiungere la reference a System.Web.MVC
  • aggiungere le cartelle Controllers e Views
  • modificare il file Global.asax per gestire le RouteMap e i global filters

A questo punto però cliccando col tasto destro sulle cartelle Controllers e Views mancano le rispettive voci di menù per aggiungere i controller e le view.

E’ necessario “istruire” Visual Studio per fargli capire che il progetto supporta anche i template MVC.

Per fare questo è necessario modificare il file csproj della web application aggiungendo il GUID dei progetti MVC.

Il tag ProjectTypeGuids deve cominciare con {E53F8FEA-EAE0-44A6-8774-FFD645390401}:

<ProjectTypeGuids>{E53F8FEA-EAE0-44A6-8774-FFD645390401};[senza ulteriori spazi e senza modificare il resto del tag)]</ProjectTypeGuids>
 
Share

Rimuovere l’estensione aspx dagli url di Umbraco

Di default gli url delle pagine generati da Umbraco hanno l’estensione .aspx.

E’ possibile disabilitare la generazione dell’estensione ottenendo Url più SEO friendly semplicemente impostando a true il parametro umbracoUseDirectoryUrls nel web.config.

<add key="umbracoUseDirectoryUrls" value="true" />

La cosa più importante è che tutti gli url continuano a funzionare anche con l’estensione aspx, il che garantisce che le pagine già indicizzate nei motori di ricerca siano ancora valide.

Share

Guida ad IIS Express in formato PDF

Adesso che è stato rilasciato assieme a WebMatrix e che a breve l’integrazione con Visual Studio 2010 sarà completa con il rilascio del Service Pack 1 ho scritto una piccola guida ad IIS Express.

La guida copre un po’ tutti gli aspetti del nuovo web server.

Si parte da una introduzione su cos’è IIS Express e sulle sue differenze rispetto a Cassini e a IIS.

La guida poi esamina l’installazione, configurazione ed esecuzione e comprende in dettaglio l’integrazione con Visual Studio 2010 e 2008.

SOMMARIO

  1. Cos’è IIS express
  2. Confronto tra IIS, Cassini e IIS Express
  3. Installazione
  4. Piattaforme supportate
  5. Esecuzione di IIS Express
    1. Esecuzione di IIS Express dalla command line
    2. Esecuzione tramite WebMatrix
  6. Gestire siti con IIS Express
  7. IIS Express dietro le quinte
    1. Il file applicationHost.config
    2. La sezione <applicationPools>
    3. La sezione <sites>
  8. Windows Process Activation Service
  9. Integrazione con Visual Studio 2010
    1. Configurazione di IIS Express da Visual Studio
    2. Impostare IIS Express come web server di default
  10. Configurare IIS Express con Visual Studio 2008

DOWNLOAD

La guida è in formato PDF (392,11 kb).

Per riceverla gratuitamente nella tua casella di posta elettronica puoi fare una richiesta dalla pagina contatti.

In questo vecchio post potete sinteticamente vedere le differenze tra i tre web server:

Cassini e IIS hanno partorito un figlio: IIS Express

Share

Slide ed esempi della sessione Powerful Asp.net 4 e Internet Explorer 9

Ecco le slide e la soluzione di esempio che ho utilizzato per mostrare le novità di Asp.net 4.0 e di Internet Explorer 9 durante l’evento Community Tour 2010 a Bologna.

 

Codice di esempio: Asp.Net 4 e IE9 samples

Presentazione Power Point: 

Share

Completata l’agenda della sessione ASP.Net 4 e IE9

CommunitTour2010Ho completato l’agenda della sessione che terrò martedi 16 novembre nell’ambito del Community Tour organizzato dalle community DotDotNet e SharePointCommunity.

Powerful ASP.Net 4.0

  • Core services
    • Web.config File Refactoring
    • Auto-Start Web Applications
    • Permanently Redirecting a Page
    • Shrinking Session State
  • AJAX
    • jQuery out of the box
    • Content Delivery Network Support
    • ScriptManager Explicit Scripts
  • Web forms
    • Meta Tags con Page.MetaKeywords e Page.MetaDescription
    • ViewState e ViewStateMode
    • Routing in ASP.NET 4
    • Gestire i Client ID
    • Persisting Row Selection nei Data Controls
    • ASP.NET Chart Control
    • Html Encoded Code Expressions
    • CSS e rendering improvements
      • div Elements e Hidden Fields
      • Rendering delle tabelle per i controlli template
      • ListView Control Enhancements
      • CheckBoxList e RadioButtonList Control Enhancements
      • Menu Control Improvements
  • Visual Studio 2010 Web Development Improvements
    • HTML e JavaScript Snippets
    • JavaScript IntelliSense
  • Web Application Deployment
    • Web.config Transformation

Internet Explorer 9

  • HTML 5
    • Canvas
    • Audio
    • Video
    • Semantic tags
    • Client side storage
  • Accelerazione tramite GPU
  • Pinned sites
  • Developer Tools (aka F12)

Iscrizioni

Ricordando quali sono i temi trattati:

  • Sviluppo di Windows Phone 7
  • Migliorare la User Interface
  • Conoscere le novità di ASP.NET 4.0 e Internet Explorer 9
  • Il framework di sviluppo di SharePoint 2010
  • Sviluppare applicazioni silverlight per SharePoint 2010

rinnovo l’invito a partecipare all’evento. Per maggiori informazioni ed iscrizioni: http://dotdotnet.org/content/Tour2010Nov.aspx

Share

Come visualizzare i messagi di errore del framework in inglese

Dopo aver installato e configurato una nuova macchina per lo sviluppo con Windows 7 Ultimate (rigorosamente tutto in inglese), mi metto a far modifiche su un sito e ricevo le eccezioni in italiano.

Il problema è legato ai language pack di Windows 7 che probabilmente nel mio caso sono stati aggiunti in automatico durante un’installazione di SQL Server multilanguage.

Per visualizzare correttamente tutti i messaggi del Framework .Net in inglese è sufficiente andare nel pannello di controllo ->  (oppure usare il comando LPKSETUP)

Pannello di controllo - Lingue

e rimuovere tutte le lingue inutilizzate (io ho lasciato solo l’inglese).

Pannello di controllo - Rimozione lingue

Share