9 messaggi dal 25 settembre 2013
Buongiorno a tutti,
ho un'applicazione ASP.NET Web Form e ogni volta che effettuo delle modifiche o correzioni devo ricompilare il progetto e copiare/incollare nella directory. Con il risultato che quando effettuo quest'ultimo passaggio il server si blocca per qualche secondo/minuto e gli utenti vengono disconnessi.
come è possibile evitare la compilazione così da poter effettuare le modifiche direttamente sul server senza il bisogno di ricompilare ogni volta il progetto?

Ringrazio in anticipo
Saluti
Donato
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

BlackThunder ha scritto:

ho un'applicazione ASP.NET Web Form e ogni volta che effettuo delle modifiche o correzioni devo ricompilare il progetto e copiare/incollare nella directory

Una facilitazione per te: usa la funzionalità "Publish" che Visual Studio ti mette a disposizione. Ne abbiamo parlato qui.

Questa, tuttavia, non risolverà il problema. Serve solo ad evitarti le operazioni manuali di copia-incolla.

BlackThunder ha scritto:

come è possibile evitare la compilazione

Se apporti modifiche ai file di codice non puoi evitare la ricompilazione del progetto. Il massimo che ti è concesso di fare è qualche modifica al markup delle pagine (o delle view, se usi ASP.NET MVC) purché tu non abbia scelto di compilare pure quelle.

Secondo me non dovresti combattere contro il riavvio dell'applicazione, perché è inevitabile. Però puoi assicurarti che IIS usi sempre le stesse chiavi di crittografia. Queste chiavi servono a decrittare i cookies di sessione e di autenticazione che sono in possesso dei vari client. E' questo il problema: se per qualche motivo le chiavi cambiano, ASP.NET non sarà più in grado di decifrare i cookies che aveva emesso in precedenza.

Il primo tentativo che farei è quello di impostare le chiavi staticamente, in modo che restino sempre le stesse. Leggi qui:
http://blogs.msdn.com/b/vijaysk/archive/2009/05/13/iis-7-tip-10-you-can-generate-machine-keys-from-the-iis-manager.aspx

Inoltre, sei hai qualche dato utente conservato in sessione, dovresti usare una modalità diversa da InProc, in modo che quei dati possano sopravvivere ad un riavvio dell'applicazione. Per esempio, potresti usare le modalità StateServer o SqlServer.
http://msdn.microsoft.com/en-us/library/vstudio/ms178586(v=vs.100).aspx

Questo dovrebbe evitare che gli utenti vengano buttati fuori dall'applicazione. Non eviterà che una richiesta fallisca, se viene inviata proprio durante il riavvio dell'applicazione.

BlackThunder ha scritto:

il server si blocca per qualche secondo/minuto

Anche questo è inevitabile, quando si usa un solo server.
Windows Azure, ad esempio, risolve questo problema con una funzionalità chiamata "VIP Swap". In pratica hai due istanze: la prima è quella di produzione e l'altra è quella di staging. Quest'ultima non serve alcuna richiesta, ma è usata giusto come banco di prova. La pubblicazione la fai sul server di staging e, quando hai verificato che tutto funziona e che IIS è pronto a ricevere richieste, allora scambi i ruoli e l'istanza di staging diventa immediatamente quella di produzione (e viceversa).
http://azure.microsoft.com/it-it/documentation/articles/web-sites-staged-publishing/#Swap

ciao,
Moreno
Modificato da BrightSoul il 28 agosto 2014 10.03 -

Enjoy learning and just keep making
3.939 messaggi dal 28 gennaio 2003
Mi permetto di invadere questo post per chiedere a BrightSoul:

Non avendo Azure ma due server, si può emulare "VIP Swap"?

Ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Pietro,
non l'ho mai fatto personalmente ma immagino che si possa replicare in due modi:
  • A livello di rete, predisponendo un'appliance tipo router o load balancer che riceve tutte le richieste HTTP in ingresso e le smista ad un solo webserver. Quando vuoi fare lo swap, aggiorni la regola del router in modo che inizi ad inviare il traffico all'altro webserver. Eccolo illustrato in questa immagine. Ovviamente devi disporre di un dispositivo che ti consenta di inviare comandi e che possa aggiornare la propria tabella di routing a caldo. Roba per sistemisti, non so dirti di più.
  • A livello applicativo, sfruttando il pacchetto Application Request Routing (ARR) per IIS. Ti permette di aggiungere i due server ad un insieme chiamato server farm e di fare da intermediario per le richieste HTTP. Non sono sicuro che possa essere usato per switchare il traffico da una macchina all'altra ma vedo che ognuno di quei server può essere dichiarato Offline quindi immagino che se uno solo dei server è Online, riceverà per forza tutto il traffico in ingresso. Se si ha a disposizione un solo webserver, magari è possibile fare tutto con quello, sia server farm che entrambe le applicazioni (produzione + staging). Bisognerebbe sperimentare.


ciao,
Moreno

Enjoy learning and just keep making
3.939 messaggi dal 28 gennaio 2003
Non sono un sistemista e l'argomento è abbastanza oscuro per me.
Ma comunque, è un vero piacere leggere le tue risposte.
Ciao.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.