Newsgroup: it.comp.www.asp
Titolo: Bloccare l'esecuzione di ASP

Ho un sito intranet, su cui gli utenti possono fare
delle interrogazioni.
Quando un utente sbaglia i parametri di ricerca e richiama
a video una grossissima quantita` di dati la cosa diventa lenta
(come dovrebbe essere).
Il problema e` che se prima di avere i dati a video l'utente
cambia idea e schiaccia TERMINA sul browser, il mio IIS
non smette di elaborare e l'utente puo` rifare
un'altra interrogazione solo dopo aver inutilmente
aspettato il tempo necessario per calcolare i dati della
richiesta sbagliata.
Come si puo` interrompere effettivamente anche
il lavoro di IIS quando l'utente schiaccia TERMINA?
Ciao e grazie.
Miche.

non credo tu possa fermarlo
l'unica cosa che puoi fare è impostare un timeout basso
oppure controllare il numero di record estratti e se è
maggiore di x mettere un'alert o impedirgli la visualizzazione.
Altrimenti potresti usare una bella paginazione
Cià
Andrea Biagioni
www.alias2k.com

 il lavoro di IIS quando l'utente schiaccia TERMINA?
in realta' non e' molto difficile, pero' dipende da che tipo di elaborazione
stai esguendo. Se e' una elaborazione che ti permette (lato server) di fare
dei controlli ogni tanto (ad esempio in una estrapolazione di record ogni
100 record ottenuti puoi fare un determinato controllo).
Supponiamo, quindi, che sia una elaborazione che permetta un controllo ogni
tot di (quello che vuoi).
Il problema e' che il client e il processo server sono completamente
separati, e' la tua applicazione che fa "credere" all'utente finale che
siano una unica cosa. L'idea e' di avere in una pagina DUE pulsanti diversi:
    uno che fa partire l'esecuzione del processo (con un pulsante di tipo
SUBMIT)
    l'altro che lo fa terminare
    il primo esegue la pagina ASP che fa l'elaborazione
    l'altro non chiama nessuna pagina ASP, ma setta un cookie con script
lato client.
    La pagina ASP, ogni tot di tempo va a verificare se il cookie di
controllo non sia stato impostato (o variato). Se cosi' fosse, si interrompe
l'elaborazione che stava eseguendo. Ad esempio:
la pagina ASP sta restituendo una pagina al client con Nmila record
(ovviamente operazione sconsigliata, ma e' solo per fare un esempio). Ogni
100 "moveNext" controlla che il cookie "terminate" sia "false". Se e' cosi'
continua.
Qualora il cookie dovesse assumere il valore di "true" si esce dal ciclo
while (o quello che vuoi), e, magari, si imposta la corretta risposta (o un
"redirect" oppure vengono mostrati i record sino a quel momento ottenuti).
dal lato client, con il pulsante "termina" non fai altro che impostare, con
uno script lato client, il cookie "terminate" a "true".
Non e' l'unica soluzione, ne puoi implementare di diverse.
Simone Medas.

 uno script lato client, il cookie "terminate" a "true".
Non si puo` lasciare perdere il cookie e leggere se il pulsante
TERMINA di Explorer e` stato premuto?
Oppure associare impostare un cookie alla pressione del pulsante
TERMINA di Explorer?
In pratica non posso mettere un ***mio*** pulsante TERMINA,
diverso da quello  di Explorer: troppo fuori dallo standard (e` solo un
problema di forma).
Ciao e grazie.
Miche.

 Altrimenti potresti usare una bella paginazione
Ancora una volta devo dire NO.
Informix Dynamic Server 7.23 non gestisce la paginazione. :-((((
Altre idee?
Ciao, Miche.

prova a fare una ricerca su msdn di "isclientconnected" ... se non ricordo
male c'è una proprietà che permette di verificare se il client che ha
iniziato una sessione è ancora connesso .... ciao, giullo

 problema di forma).
e chi lo ha deciso? non sono stato aggiornato sul fatto!!! ;-)
il pulsante termina di IE e' una funzionalita' del browser non della tua
applicazione. Fatto sta che potresti, nella tua applicazione, non mostrare
la toolbar dle browser e mettere un tasto "termina" che fa proprio quello
che ti ho scritto (magari ci metti una icona, nel pulsante termina,
uguale-uguale al termina di IE, cosi' sei piu convinto che sia standard).

 uguale-uguale al termina di IE, cosi' sei piu convinto che sia standard).
Questo e` molto piu` interessante!
Hai idea di come farlo?
Oppure di dove cercare info?
Grazie, 1000.
Miche.


una volta che hai aperto la finestra del browser(1) senza la toolbar (e
quant'altro non ti serve piu') potresti suddividere la pagina principale in
framesets dove il frame superiore puo' essere creato in modo tale da
assomigliare alla toolbar del browser con i pulsanti che servono alla tua
applicazione (compreso il pulsante "termina").
(1): e' probabile che gia' sai come aprire il browser, ma te lo scrivo per
sicurezza:
dal lato client (ovviamente) fai premere un pulsante (o quello che vuoi) che
richiama il metodo "open" dell'oggetto "window" in questa maniera:
objWindow = window.open( [strURL] [, strName] [, strFeatures] [, bReplace])
dove strFeatures puo' essere composto da (riporto il testo della
documentazione microsoft):
Optional parameter. String that specifies the window ornaments to display.
This parameter is a list of items separated by commas. Each item consists of
an option and a value, separated by an equals sign (for example,
fullscreen=yes,toolbar=yes). The following features are supported:
channelmode = { yes | no | 1 | 0 } Specifies whether to display the window
in theater mode and show the channel band. The default is no.
      directories = { yes | no | 1 | 0 } Specifies whether to add directory
buttons. The default is yes.
      fullscreen = { yes | no | 1 | 0 } Specifies whether to display the
browser in a full-screen or normal window. The default is no, which displays
the browser in a normal window. Use full-screen mode carefully. Because this
mode hides the browser's title bar and menus, you should always provide a
button or other visual clue to help the user close the window. ALT+F4 also
closes the new window.
      height = number Specifies the height of the window, in pixels. The
minimum value is 100.
      left = number Specifies the left position, in pixels. This value is
relative to the upper-left corner of the screen.
      location = { yes | no | 1 | 0 } Specifies whether to display the input
field for entering URLs directly into the browser. The default is yes.
      menubar = { yes | no | 1 | 0 } Specifies whether to display the menu
bar. The default is yes.
      resizable = { yes | no | 1 | 0 } Specifies whether to display resize
handles at the corners of the window. The default is yes.
      scrollbars = { yes | no | 1 | 0 } Specifies whether to display
horizontal and vertical scroll bars. The default is yes.
      status = { yes | no | 1 | 0 } Specifies whether to add a status bar at
the bottom of the window. The default is yes.
      titlebar = { yes | no | 1 | 0 } Specifies whether to display a title
bar for the window. This parameter is ignored unless the caller is an HTML
Application or a trusted dialog box. The default is yes.
      toolbar = { yes | no | 1 | 0 } Specifies whether to display the
browser toolbar, making buttons such as Back, Forward, and Stop available.
The default is yes.
      top = number Specifies the top position, in pixels. This value is
relative to the upper-left corner of the screen.
      width = number Sets the width of the window, in pixels. The minimum
value is 100.
Simone Medas.
PS: chiedi per ulteriori delucidazioni.