Cenni preliminari su .NET Framework
.NET Framework è un componente integrante di Windowsche supporta la generazione e l'esecuzione diapplicazioni di nuova generazione e servizi Web XML. .NETFramework è progettata per ottenere gli obiettiviindicati di seguito:
- Fornire un ambiente di programmazione orientato agli oggetti coerente, sia che il codice degli oggetti sia memorizzato ed eseguito localmente, eseguito localmente ma distribuito su Internet oppure eseguito in modalità remota.
- Fornire un ambiente di esecuzione del codice che minimizzi la distribuzione del software e i conflitti di versioni.
- Fornire un ambiente di esecuzione del codice che permetta un'esecuzione sicura anche dei codici creati da produttori sconosciuti o semi-trusted.
- Fornire un ambiente di esecuzione del codice che elimini i problemi di prestazioni degli ambienti basati su script o interpretati.
- Rendere coerente l'esperienza dello sviluppatore attraverso tipi molto vari di applicazioni, quali applicazioni basate su Windows e applicazioni basate sul Web.
- Generare tutte le comunicazioni in base agli standard industriali per assicurare che il codice basato su .NET Framework possa integrarsi con qualsiasi altro codice.
.NET Framework presenta due componenti principali: CommonLanguage Runtime e la libreria di classi .NET Framework.Common Language Runtime rappresenta la base di .NET Frameworke può essere considerato come un agente che gestisceil codice in fase di esecuzione, fornendo servizi di basequali gestione della memoria, gestione di thread e serviziremoti, attivando al contempo una rigida indipendenza deitipi e altre forme di accuratezza del codice che permettanoprotezione ed efficienza. Il concetto di gestione del codiceè infatti un principio fondamentale di runtime. Ilcodice destinato al runtime è definito codice gestito,mentre quello non destinato al runtime è definitocodice non gestito. La libreria di classi, l'altrocomponente principale di .NET Framework, è un insiemecompleto orientato agli oggetti di tipi riutilizzabili chepossono essere impiegati nello sviluppo delle applicazioni,da quelle tradizionali della riga di comando o coninterfaccia utente grafica (GUI, Graphical User Interface) aquelle basate sulle più recenti innovazioni fornite daASP.NET, quali Web Form e servizi Web XLM.
.NET Framework può essere contenuto da componenti nongestiti che caricano Common Language Runtime nei processi eavviano l'esecuzione del codice gestito, creandocosì un ambiente software in grado di sfruttarefunzionalità gestite e non gestite. .NET Framework nonfornisce solo diversi host di runtime ma supporta anche losviluppo di host di runtime di altri produttori.
In ASP.NET è ad esempio disponibile il runtime perfornire un ambiente lato server scalabile per il codicegestito. È possibile utilizzare ASP.NET direttamentecon il runtime per attivare applicazioni ASP.NET e serviziWeb XLM, entrambi trattati più avanti in questoargomento.
Internet Explorer è un esempio di applicazione nongestita che contiene il runtime, in forma di estensione ditipo MIME. L'hosting del runtime tramite InternetExplorer consente di incorporare componenti gestiti ocontrolli Windows Form nei documenti HTML. Questo tipo dihosting rende possibile il codice mobile gestito, simile aicontrolli Microsoft® ActiveX®, ma con significativimiglioramenti che solo il codice gestito può offrire,ad esempio l'esecuzione semi-trusted el'archiviazione di file isolati.
Nella seguente illustrazione viene mostrata la relazione diCommon Language Runtime e libreria di classi con leapplicazioni e con l'intero sistema. Viene inoltremostrato come opera il codice gestito all'interno diun'architettura più ampia.
.NET Framework nelcontesto
Nelle sezioni che seguono vengono descritti piùdettagliatamente i principali componenti e le principalifunzionalità di .NET Framework.
Funzionalità di Common Language Runtime
Common Language Runtime gestisce la memoria, l'esecuzionedi thread, l'esecuzione del codice, la verifica dellaprotezione del codice, la compilazione e altri servizi disistema. Queste funzionalità sono intrinseche alcodice gestito che viene eseguito sul Common LanguageRuntime.
Per quanto riguarda la protezione, ai componenti gestitivengono assegnati vari gradi di attendibilità in basea diversi fattori fra cui l'origine, ad esempio Internet,una rete aziendale o un computer locale. Un componentegestito quindi può essere o non essere in grado dieseguire operazioni di accesso a file, o al registro disistema o altre funzioni riservate anche se utilizzato nellastessa applicazione attiva.
La protezione di accesso al codice è messa in atto dalruntime. Gli utenti possono ad esempio consentire a uneseguibile incorporato in una pagina Web di eseguireun'animazione sullo schermo o una canzone, ma non diaccedere ai propri dati personali, al file system o allarete. Le funzionalità di protezione del runtimeconsentono pertanto al software lecito distribuito suInternet di essere particolarmente ricco difunzionalità.
L'efficienza del codice è inoltre attivata dalruntime mediante l'implementazione di una rigidainfrastruttura di verifica di tipi e codice denominata CTS(Common Type System). CTS assicura che tutto il codicegestito sia auto descrittivo. I vari compilatori dilinguaggio di Microsoft e di altri produttori generano codicegestito conforme a CTS, consentendo a tale codice diutilizzare altri tipi e istanze, pur mantenendo una rigidafedeltà e indipendenza dei tipi.
Inoltre l'ambiente gestito di runtime elimina moltiproblemi comuni di software. Nel runtime vengono ad esempioautomaticamente gestiti il layout di oggetti e i riferimentia oggetti, i quali vengono rilasciati quando non sonopiù utilizzati. Questa gestione automatica dellamemoria risolve i due errori più comuni delleapplicazioni, ossia le perdite di memoria e i riferimenti amemoria non validi.
Grazie al runtime inoltre la produttività dellosviluppatore viene accelerata. I programmatori possono adesempio scrivere applicazioni nel linguaggio di svilupposcelto e sfruttare tutti i vantaggi del runtime, dellalibreria di classi e dei componenti scritti in altrilinguaggi da altri sviluppatori. Questo risultato puòessere raggiunto da qualsiasi fornitore di compilatori chesceglie di utilizzare il runtime. I compilatori di linguaggiodestinati a .NET Framework rendono disponibili lefunzionalità di .NET Framework al codice esistentescritto in tale linguaggio, facilitando notevolmente ilprocesso di migrazione delle applicazioni esistenti.
Benché il runtime sia progettato per i programmisoftware futuri, supporta anche quelli attualmentedisponibili e meno recenti. L'interoperabilità tracodice gestito e non gestito consente agli sviluppatori dicontinuare a utilizzare i componenti COM e le DLL cherisultano necessari.
Il runtime è progettato per migliorare le prestazioni.Sebbene Common Language Runtime fornisca molti serviziruntime standard, il codice gestito non viene maiinterpretato. Una funzionalità denominata compilazioneJIT (Just In Time) consente a tutto il codice gestito diessere eseguito nel linguaggio macchina nativo del sistema sucui è in esecuzione. Contemporaneamente, il gestore dimemoria impedisce la frammentazione della memoria e aumentala rintracciabilità dei riferimenti della memoria permigliorare ulteriormente le prestazioni.
Runtime può essere infine contenuto da applicazionilato server a elevate prestazioni quali Microsoft® SQLServer" e Internet Information Services (IIS). Questainfrastruttura consente di utilizzare il codice gestito perscrivere logica aziendale personalizzata, continuando asfruttare le prestazioni superiori dei migliori serveraziendali del settore che supportano l'hosting delruntime.
Libreria di classi .NET Framework
La libreria di classi .NET Framework è un insieme ditipi riutilizzabili che si integrano strettamente con CommonLanguage Runtime. La libreria di classi è orientataagli oggetti e fornisce tipi dai quali il codice gestitopuò derivare le funzionalità. In questo modonon solo viene semplificato l'utilizzo dei tipi .NETFramework ma viene anche ridotto il tempo necessarioall'apprendimento delle nuove funzionalità di .NETFramework. È inoltre possibile integrare uniformementei componenti di altri produttori nelle classi in .NETFramework.
Le classi di insiemi .NET Framework implementano ad esempioun insieme di interfacce che possono essere utilizzate persviluppare classi di insiemi personalizzate. Le classi diinsiemi si mescoleranno in modo uniforme alle classi in .NETFramework.
Come ci si aspetta da una libreria di classi orientata aglioggetti, i tipi .NET Framework consentono di effettuare unagamma di attività comuni di programmazione, incluseoperazioni quali la gestione di stringhe, la raccolta didati, la connettività al database e l'accesso afile. Oltre a queste attività comuni, la libreria diclassi include tipi che supportano vari scenari di sviluppospecializzati. È ad esempio possibile utilizzare .NETFramework per sviluppare i seguenti tipi di applicazioni eservizi:
- applicazioni console
- applicazioni GUI Windows (Windows Form)
- applicazioni ASP.NET
- servizi Web XML
- servizi Windows.
Le classi Windows Form ad esempio sono un insieme completo ditipi riutilizzabili che semplificano ampiamente lo sviluppodi GUI Windows. Se si scrive un'applicazione Web FormASP.NET, è possibile utilizzare le classi Web Form.
Sviluppo di applicazioni client
Le applicazioni client sono le più vicine allo stiletradizionale delle applicazioni nella programmazione basatasu Windows. Si tratta di tipi di applicazioni chevisualizzano finestre o form sul desktop, consentendoall'utente di eseguire un'attività. Leapplicazioni client includono elaboratori di testi e fogli dicalcolo, nonché applicazioni aziendali personalizzatequali strumenti di immissione dati, di generazione di reporte così via. Le applicazioni client generalmenteutilizzano finestre, menu, pulsanti e altri elementi GUI eaccedono a risorse locali quali file system e periferichequali stampanti.
Un altro tipo di applicazione client è il tradizionalecontrollo ActiveX, ora sostituito dal controllo Windows Formgestito, distribuito su Internet come pagina Web. Questaapplicazione è molto simile ad altre applicazioniclient: viene eseguita in modo nativo, ha accesso allerisorse locali e include elementi grafici.
In passato gli sviluppatori creavano tali applicazioniutilizzando C/C++ insieme a MFC (Microsoft FoundationClasses) o a un ambiente RAD (Rapid Application Development)quale Microsoft® Visual Basic®. .NET Frameworkincorpora aspetti di questi prodotti esistenti in un soloambiente di sviluppo coerente che semplifica enormemente losviluppo delle applicazioni client.
Le classi Windows Form contenute in .NET Framework sonoprogettate per essere utilizzate nello sviluppo di GUI.È possibile creare facilmente finestre di comando,pulsanti, barre degli strumenti e altri elementi delloschermo con la flessibilità necessaria per soddisfarele mutevoli esigenze aziendali.
In .NET Framework sono ad esempio disponibiliproprietà semplici per regolare gli attributi visualiassociati ai form. In alcuni casi il sistema operativosottostante non supporta la modifica diretta di questiattributi, quindi .NET Framework ricrea automaticamente iform. Si tratta di uno dei molti modi in cui .NET Frameworkintegra l'interfaccia dello sviluppatore, rendendo lacodifica più semplice e coerente.
A differenza dei controlli ActiveX, i controlli Windows Formdispongono di un accesso semi-trusted al computerdell'utente. Il codice eseguito in modo binario o nativopuò quindi accedere ad alcune risorse del sistemadell'utente, ad esempio elementi GUI e limitato accessoai file, ma non è in grado di accedere ad altre o dicomprometterle. A causa della protezione dell'accesso dicodice, molte applicazioni che precedentemente era necessarioinstallare sul sistema dell'utente possono ora esseredistribuite sul Web. È possibile implementare lefunzionalità di un'applicazione locale nelleproprie applicazioni, benché distribuite come unapagina Web.
Sviluppo di applicazioni server
Le applicazioni lato server nel mondo gestito sonoimplementate attraverso host runtime. Le applicazioni nongestite contengono Common Language Runtime, che consente alcodice gestito personalizzato di controllare il comportamentodel server. Questo modello fornisce tutte lefunzionalità di Common Language Runtime e dellalibreria di classi, pur garantendo le prestazioni e lascalabilità del server host.
Nella seguente illustrazione viene mostrato uno schema direte di base con codice gestito in esecuzione in diversiambienti server. I server quali IIS e SQL Server possonoeseguire operazioni standard mentre la logicadell'applicazione può essere eseguita tramite ilcodice gestito.
Codice gestito sul latoserver
ASP.NET è l'ambiente host che consente aglisviluppatori di utilizzare .NET Framework per applicazionibasate sul Web. ASP.NET non è tuttavia soltanto unhost runtime, ma è un'architettura completa per losviluppo di siti Web e oggetti distribuiti su Internet cheutilizzano il codice gestito. Sia i Web Form che i serviziWeb XML utilizzano IIS e ASP.NET come meccanismo dipubblicazione per le applicazioni e dispongono di un insiemedi classi di supporto in .NET Framework.
I servizi Web XML, importante evoluzione della tecnologiabasata sul Web, sono componenti di applicazioni del latoserver distribuiti simili ai comuni siti Web. A differenzadelle applicazioni basate sul Web tuttavia, i componenti deiservizi Web XML non dispongono di interfaccia utente e nonsono destinati a browser quali Internet Explorer e NetscapeNavigator. I servizi Web XML, invece, sono costituiti dacomponenti software riutilizzabili progettati per essereutilizzati da altre applicazioni, quali le applicazioniclient tradizionali, le applicazioni basate sul Web o anchealtri servizi Web XML. Di conseguenza la tecnologia deiservizi Web XML sta rapidamente indirizzando lo sviluppo e ladistribuzione delle applicazioni verso l'ambientealtamente distribuito di Internet.
Chi ha utilizzato le prime versioni della tecnologia ASPnoterà immediatamente i miglioramenti offerti daASP.NET e Web Form. È ad esempio possibile svilupparepagine Web Form in qualsiasi linguaggio che supporta .NETFramework. Non è più necessario, inoltre, chelo stesso file sia condiviso dal codice e dal testo HTTP,benché tale condivisione sia possibile, se lo sidesidera. Le pagine Web Form vengono eseguite nel linguaggiomacchina nativo perché, come qualsiasi altraapplicazione gestita, sfruttano completamente il runtime.Viceversa, le pagine ASP non gestite utilizzano sempre gliscript e sono interpretate. Le pagine ASP.NET sono piùveloci, più funzionali e più facili dasviluppare delle le pagine ASP non gestite, perchéinteragiscono con il runtime come qualsiasi applicazionegestita.
.NET Framework fornisce inoltre un insieme di classi e distrumenti che facilitano lo sviluppo e l'utilizzo diapplicazioni di servizi Web XML. I servizi Web XML sonogenerati su standard quali SOAP (protocollo di chiamata aprocedura remota), XML (formato dati estensibile) e WSDL (WebServices Description Language, linguaggio di descrizione deiservizi Web) e ciò garantiscel'interoperabilità con le soluzioni non Microsoft.
Lo strumento WSDL incluso nell'SDK di .NET Framework adesempio può eseguire una query in un servizio Web XMLpubblicato sul Web, analizzarne la descrizione WSDL eprodurre un codice sorgente C# o Visual Basic chel'applicazione può utilizzare per diventare unclient del servizio Web XML. Il codice sorgente puòcreare classi derivate dalle classi della libreria di classiche gestisce tutte le comunicazione sottostanti utilizzandoSOAP e l'analisi XML. Benché sia possibileutilizzare la libreria di classi per utilizzare direttamentei servizi Web XML, lo strumento WSDL e altri strumenticontenuti nell'SDK facilitano le operazioni di sviluppocon .NET Framework.
Se si sviluppa e pubblica un servizio Web XML, .NET Frameworkfornisce un insieme di classi conformi a tutti gli standarddi comunicazione sottostanti, quali SOAP, WSDL e XML.Mediante queste classi, è possibile individuare lalogica del servizio, senza preoccuparsi delle infrastrutturedi comunicazione richieste dallo sviluppo di softwaredistribuiti.
Analogamente alle pagine Web Form nell'ambiente gestito,il servizio Web XML verrà infine eseguito con lavelocità del linguaggio macchina nativo utilizzando lacomunicazione scalabile IIS.