[asp.net 4.0] Eseguire stored e rimandare a pagina di cortesia

martedì 02 settembre 2014 - 12.29

mazinga76 Profilo | Newbie

Ciao,
spero che qualcuno possa aiutarmi perche' non so piu' che fare

Ho creato una applicazione web che contiene un wizard con 4 step.
il 4 step e' definito come final, quando clicco sul bottone di questo step avvio una stored procedure che ci sta un bel po' a fare dei calcoli (anche 15 minuti).
In questo tempo vorrei fare in modo che una volta avviata la stored, l'utente veda una pagina di cortesia in cui lo aggiorno sullo stato del calcolo, sempre da questa pagina l'utente deve potersi spostare su un'altra pagina che riporta la cronologia dei calcoli in corso.
Il tutto in vb.net

Ho letto varii articoli su delegate, pagine asincrone e su background worker ma non ho proprio idea di come fare ...

Grazie

alx_81 Profilo | Guru

>Ciao,
ciao

>il 4 step e' definito come final, quando clicco sul bottone di
>questo step avvio una stored procedure che ci sta un bel po'
>a fare dei calcoli (anche 15 minuti).
Ahia.. cominciamo male. Se il database impiega così tanto, non è usato come dovrebbe. Probabilmente hai spostato logiche di business, cicli, ragionamenti molto di business su di esso, il che non è una pratica da seguire possibilmente.

>In questo tempo vorrei fare in modo che una volta avviata la
>stored, l'utente veda una pagina di cortesia in cui lo aggiorno
>sullo stato del calcolo, sempre da questa pagina l'utente deve
>potersi spostare su un'altra pagina che riporta la cronologia dei calcoli in corso.
Eh la cosa migliore sarebbe fare un servizio in .net che faccia i calcoli avendo i dati necessari presi in lettura sul database.
Cercando però di spostare le logiche su servizio, in modo da poter anche scalare e parallelizzare i calcoli, anche per andare a ridurre il carico e i lock sul database.
In questo modo, da codice, puoi avere controllo sullo stato di calcolo (puoi usare chiamate asincrone piccole per farti tornare gli stati di ogni esecuzione per la "barra di progresso").
Se non ti puoi permettere un cambiamento (o anche se non vuoi cambiare le cose), direi che l'unica è scrivere una tabella di "stati" e aggiornarla direttamente dalla logica nella stored procedure, facendo attenzione al fatto che (quasi di certo) sei sotto transazione isolata (e quindi la tabella non è leggibile). Le letture che puoi fare dalla pagina di cortesia dovranno, in tal caso, leggere in read uncommitted, altrimenti non riuscirai mai ad avere uno stato corrente visibile ed aggiornato.
Tuttavia è una pratica che mi sento di sconsigliare vivamente (non è una gran architettura, anzi). Piuttosto, se non vuoi spostare la logica dal database, cerca almeno di splittarla o di trasformarla da iterativa a SET BASED.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5