Modernize Studio
Lingua: IT
Scriveteci

Le vostre vecchie applicazioni .NET, WinForms e Web Forms, modernizzate

Le applicazioni scritte per .NET Framework negli anni Duemila e Dieci sono di solito in condizioni migliori dei programmi VB6 o Access, e meritano una risposta più attenta di una riscrittura completa. Stabiliamo cosa si può spostare così com'è e cosa va ricostruito, poi portiamo l'applicazione su ASP.NET Core con gli stessi dati e le stesse regole.

Perché adesso

Il supporto di .NET Framework 4.6.2 termina il 12/01/2027, e le versioni 4.6.1 e precedenti sono già fuori supporto. .NET Framework 4.8 e 4.8.1 seguono il ciclo di vita della versione di Windows su cui sono installati, quindi un'applicazione su 4.8 non corre rischi immediati. Il framework però riceve solo correzioni, mentre nuove librerie, strumenti e opzioni di hosting nascono per il .NET attuale.

ASP.NET Web Forms funziona solo su .NET Framework e non è stato portato in ASP.NET Core. Windows Forms funziona sul .NET attuale, ma resta una tecnologia desktop per Windows e non dà al vostro personale l'accesso da browser.

  1. Windows 10Fine del supporto Microsoft
  2. .NET Framework 4.6.2Fine del supporto Microsoft

Cosa modernizziamo

Applicazioni desktop e web costruite su .NET Framework, e i servizi che le circondano.

  • Applicazioni Windows Forms

    Programmi desktop con griglie DataGridView, DataSet tipizzati e TableAdapter, spesso installati con ClickOnce o un MSI. Diventano applicazioni web, oppure passano al .NET attuale restando programmi desktop quando è la scelta migliore.

  • Siti ASP.NET Web Forms

    Pagine con ViewState, postback, UpdatePanel, GridView e SqlDataSource, master page e user control. Le ricostruiamo in ASP.NET Core con Razor Pages, MVC o Blazor, a seconda dell'applicazione.

  • Accesso ai dati

    Codice ADO.NET, DataSet tipizzati, LINQ to SQL, modelli Entity Framework 6 e stored procedure. Se il database è solido lo teniamo e cambiamo solo il codice che lo interroga.

  • Servizi e integrazioni

    Servizi web WCF e ASMX, .NET Remoting e servizi Windows. Diventano API REST e servizi in background sul .NET attuale.

  • Autenticazione e configurazione

    Forms Authentication, provider Membership di ASP.NET, autenticazione Windows, impostazioni in web.config e app.config. Utenti e ruoli passano su ASP.NET Core Identity, oppure su Microsoft Entra ID o Active Directory se li usate già.

  • Report

    Crystal Reports per Visual Studio, report RDLC in ReportViewer ed esportazioni in Excel. Diventano documenti generati dal server, in PDF o in Excel.

Come diventa la versione web

Esempio illustrativo, dati di fantasia

Un registro degli affitti come potrebbe apparire in un programma WinForms, e lo stesso registro come pagina web.

Trascinate il cursore, oppure usate le frecce della tastiera.

Dove finisce ogni parte

In .NET Framework: Schermate WinForms o pagine .aspx
Nell'applicazione web: Razor Pages o componenti Blazor
In .NET Framework: Code-behind e gestori di eventi
Nell'applicazione web: Servizi e controller coperti da test
In .NET Framework: DataSet tipizzati, LINQ to SQL
Nell'applicazione web: Entity Framework Core o Dapper, sullo stesso database
In .NET Framework: Servizi WCF o ASMX
Nell'applicazione web: API REST su ASP.NET Core
In .NET Framework: Membership e Forms Authentication
Nell'applicazione web: ASP.NET Core Identity o Entra ID
In .NET Framework: ClickOnce o MSI su ogni PC
Nell'applicazione web: Un indirizzo, aperto nel browser

Come si svolge la migrazione

  1. Analisi entro 48 ore

    Ci mandate la solution con il codice sorgente, un backup o uno script del database e i file di configurazione senza le password di produzione. Entro 48 ore vi rispondiamo con un report scritto: cosa fa oggi il programma, dove sono i rischi, come sarebbe organizzata la versione web, un prezzo fisso per un modulo pilota e una stima per il resto. È gratuita e non vi impegna a nulla.

  2. Modulo pilota

    Realizziamo una parte dell'applicazione su una copia dei vostri dati reali, di solito quella che si usa di più. Il vostro personale la usa nel lavoro di tutti i giorni prima che decidiate sul resto.

  3. Test automatici tra vecchio e nuovo

    Mandiamo le stesse richieste e gli stessi dati alla vecchia e alla nuova applicazione e confrontiamo i risultati, dai campi calcolati alle risposte delle API e ai documenti generati. Per ogni regola che troviamo scriviamo un test automatico che dà gli stessi dati in ingresso al vecchio programma e alla nuova applicazione e controlla che i risultati coincidano. Ricevete i risultati dei test.

  4. 30 giorni in parallelo

    Quando l'applicazione completa è pronta, la vecchia applicazione resta in uso accanto a essa per 30 giorni. Ogni differenza emerge mentre il vecchio programma c'è ancora, e la correggiamo all'interno del prezzo concordato.

Gli intoppi tipici, e come li gestiamo

  1. ViewState e logica dei postback

    Le pagine Web Forms tengono lo stato nel ViewState e in Session, e la loro logica è divisa tra Page_Load, eventi dei controlli e controlli IsPostBack. In ASP.NET Core non c'è un equivalente. Traduciamo il ciclo di vita della pagina in richieste esplicite, così ogni azione ha un punto d'ingresso chiaro.

  2. API che non esistono più

    Domini applicazione, .NET Remoting e Code Access Security non sono disponibili sul .NET attuale, e alcune API compilano ma sollevano PlatformNotSupportedException quando vengono eseguite. Le cerchiamo nel codice durante l'analisi, prima di fissare qualsiasi prezzo.

  3. Password del Membership

    Gli account creati dal vecchio provider Membership di ASP.NET salvano le password in un formato di hash che ASP.NET Core Identity non usa. Migriamo gli account in modo che le persone accedano con la password attuale e l'hash venga aggiornato al primo accesso, oppure prevediamo un reset se le vecchie impostazioni non lo consentono.

  4. Controlli di terze parti e motori di report

    Le suite di controlli per Web Forms e WinForms, come quelle di Telerik, DevExpress o Infragistics, e il runtime di Crystal Reports sono legati a versioni precise del framework. Verifichiamo versioni e licenze e decidiamo controllo per controllo con cosa sostituirli.

  5. Regole in stored procedure e trigger

    In molte applicazioni di quel periodo le vere regole di business stanno nel database. Se il database resta, anche quelle procedure restano e vengono coperte dai test di confronto. Se cambia, le spostiamo una alla volta, con criterio.

  6. Stato tenuto in memoria

    Le applicazioni che tengono dati in Session, in variabili statiche o nella cache in-process danno per scontato un unico server che non si riavvia mai. Rendiamo esplicito quello stato, così la nuova applicazione può girare su più istanze e sopravvivere a un riavvio.

Prezzo e pagamento

Analisi

Gratuita

scritta, entro 48 ore

Modulo pilota

1.000–1.500 €

di solito, 50% all'inizio e 50% all'approvazione

L'analisi è gratuita. Se decidete di non andare avanti, il report resta a voi e non dovete nulla.

I prezzi sono fissi e concordati per iscritto prima di iniziare. Se il perimetro cambia, vi mandiamo un nuovo preventivo scritto e aspettiamo la vostra approvazione prima di fare il lavoro in più.

Per una migrazione completa puntiamo a stare dal 40 al 60% sotto il preventivo tipico di un'agenzia. Possiamo farlo perché siamo uno studio piccolo, senza uffici da pagare né rete commerciale.

Prezzi IVA esclusa.

Provate il calcolatore di prezzo

Una migrazione vera, verificata dai test

Northwind è il database di esempio che Microsoft distribuiva con Access, non un nostro cliente. Ne abbiamo migrato una copia pubblica in SQLite e PostgreSQL, confrontato ogni tabella e ogni query con l'originale tramite test automatici e costruito sul risultato un'applicazione web funzionante. Il caso di studio riporta i numeri, il report di equivalenza elenca ogni controllo.

Northwind è un database Access, ma per .NET WinForms e WebForms seguiamo lo stesso metodo: migrare, testare rispetto all'originale, far girare i due in parallelo.

Report di equivalenza (in inglese) · Anteprima cliccabile e analisi di esempio (demo)

Domande frequenti

Dobbiamo riscrivere tutto?

No. Le librerie di classi con la logica di business passano spesso al .NET attuale con modifiche limitate, e il database di solito può restare. Ciò che cambia di più è l'interfaccia, cioè le pagine Web Forms e le schermate WinForms. L'analisi separa ciò che si può spostare da ciò che va ricostruito.

La nostra applicazione WinForms può restare un programma desktop?

Sì. Windows Forms è supportato sul .NET attuale, e passarci allunga la vita del programma con una spesa inferiore a una riscrittura web. Se i vostri utenti hanno bisogno di accedere da browser o da fuori ufficio, la risposta è un'applicazione web. Quando hanno senso entrambe, l'analisi le quota tutte e due.

La nostra applicazione gira su .NET Framework 4.8. È urgente?

Non per il supporto, dato che 4.8 e 4.8.1 seguono il ciclo di vita della versione di Windows su cui girano. I motivi per spostarsi di solito sono altri: accesso da browser, hosting su Linux, librerie che non supportano più .NET Framework, o la difficoltà di trovare sviluppatori Web Forms.

La migrazione si può fare per fasi?

Sì. ASP.NET Core e la vecchia applicazione possono girare affiancate dietro lo stesso indirizzo, spostando un'area alla volta. È lo stesso approccio incrementale che Microsoft descrive nella sua documentazione per le applicazioni ASP.NET.

Usate strumenti di aggiornamento automatico?

Dove servono, per esempio per aggiornare i file di progetto e i riferimenti ai pacchetti. Non decidono però come deve funzionare una pagina Web Forms in ASP.NET Core, e ogni parte convertita passa per gli stessi test di confronto del resto.

Quale database useremo?

Di solito quello che avete già, in genere SQL Server. Cambiare database è una decisione a parte, e la consigliamo solo quando c'è un motivo chiaro.

Contatti

Via email:

riccardo@modernizestudio.com
Scriveteci un'email

Mandateci il codice sorgente e una copia del database con dati di prova, oppure una breve descrizione dell'applicazione. Vi rispondiamo entro un giorno lavorativo.

Lavoriamo dall'Italia.

Scriveteci