Newsgroup: it.comp.www.asp
Titolo: Application at end non mi funziona

Allego il mio file global.asa.
Il record contatore non mi viene aggiornato in uscita
Qualcuno mi są aiutare?
<SCRIPT LANGUAGE="JavaScript" RUNAT="SERVER">
function Session_OnStart() {
  Application.Lock;
  Application( "online" ) = Application( "online" ) + 1;
  Application( "visite" ) = Application( "visite" ) + 1;
  Application.UnLock;
  var ObjMail;
  ObjMail=new ActiveXObject("CDONTS.NewMail");
  ObjMail.From      ="
Merc...@chrys-bj.it
";
  ObjMail.To        = "
chry...@libero.it
";
  ObjMail.Subject   ="Visitatori attuali " ;
  ObjMail.Body      = "Utenti on line " + Application( "online" ) + " Visite
totali " + Application( "visite" );
  ObjMail.Importance=1;
  ObjMail.Send();
};
function Session_OnEnd(){
  Application.Lock;
  Application( "online" ) = Application( "online" ) - 1;
  Application.UnLock;
};
function Application_OnStart(){
 var sql;
 var recordset;
 var connection;
 sql = "SELECT * FROM Counter WHERE page=1";
 connection = new ActiveXObject("ADODB.Connection");
 connection.open(
        "driver={Microsoft Access Driver (*.mdb)};dbq=" +
        Server.MapPath("dati/utenti.mdb") + ";" );
 recordset = connection.execute( sql );
 if (!recordset.eof) {
     Application( "visite" ) = recordset.fields("count").value;
 } else {
     Application( "visite" ) = 0;
     sql = "INSERT INTO Counter (count, page) VALUES ('0', '1')";
     connection = new ActiveXObject("ADODB.Connection");
     connection.open(
        "driver={Microsoft Access Driver (*.mdb)};dbq=" +
        Server.MapPath("dati/utenti.mdb") + ";" );
     recordset = connection.execute( sql );
 };
  Application( "online" ) = 0;
};
function Application_OnEnd(){
 var sql;
 var recordset;
 var connection;
 sql = "UPDATE Counter SET (count='"+ Application( "visite" ) +"') WHERE
page=1";
 connection = new ActiveXObject("ADODB.Connection");
 connection.open(
        "driver={Microsoft Access Driver (*.mdb)};dbq=" +
        Server.MapPath("dati/utenti.mdb") + ";" );
 recordset = connection.execute( sql );
};
</script>
--
Chrys-bj
www.digilander.iol.it/chrysbj

Non ti funziona lo script oppure non viene eseguito Application _OnEnd?
Application_OnEnd viene eseguito quando "termini" l'applicazione, ad esempio
perchč riavvii il server o fermi IIS. Su un server web sempre attivo non si
verifica praticamente mai.
Per vedere se č la routine che non va, mettila in in un altra pagina e
provala.
Paolo

Se io ricarico il global.asa in teoria dovrebbe prima uscire e poi
rientrare, giusto?
Invece sembra non uscire!!!
--
Chrys-bj
www.digilander.iol.it/chrysbj

Sembra anche a me to sempre che, aggiornando il global.asa, il sistema
riavviasse l'applicazione. Ma, se è stato cambiato, come farà IIS ad
eseguire il vecchio OnEnd?
In generale:
Non ti fidare mai del Application_OnEnd per salvare dei dati!
Usa qualunque altra tecnica. Magari agganciandoti ad altri eventi.
Usalo solo per liberare la memoria da oggetti creati precedentemente, magari
nel Application_OnStart.
In ambiente di produzione non viene eseguito praticamente mai, e se per caso
il server si blocca o va via la luce... come fai ad eseguirlo?
Inoltre gli errori nello script non riesci a vederli bene.
Fai come ti ho detto: sposta la tua routine in una sub separata, provala, e
se non ti da problemi, la puoi agganciare lì, ma anche ad altri eventi.
L'importante è che il tuo contatore venga salvato, meglio una volta in più
che una volta in meno.