3 messaggi dal 13 gennaio 2004
Salve, ho il seguente problema:
clickando su un bottone in una pagina ASP.NET, un utente invia un SMS ad un dispositivo remoto.
Il dispositivo risponde con i suoi tempi effettuando una POST HTTP sul mio server che andra' ad aggiungere una riga in un SQL 2000 oppure effettua un FTP di un file sul mio server, al path indicatogli dal SMS.
A questo punto devo aggiornare la pagina del mio utente informandolo dell'azione avvenuta ed eventualmente consentigli di scaricare il file zippato sul suo PC.
A livello di architettura come posso fare tutto questo? Come si fa ad aggiornare una pagina di una certa sessione ASP.NET?

Grazie per gli eventuali suggerimenti.
Fino all'avviso per l'utente non compreso si può fare. Il problema è dopo perché si incappa nei limiti di http. O l'utente è in attessa di una risposta dal server in seguito ad una richiesta oppure lui deve fare il refresh ogni tot secondi.

Ciao

Il mio blog
Homepage
3 messaggi dal 13 gennaio 2004
Grazie della risposta che quindi mi da due soluzioni:
1) Realizzare un webservice che faccia le azioni e gestirlo in modo asincrono dalla mia pagina, per esempio visualizzando una barretta incrementale
2) Mettere un timer e periodicamente campionare lo stato di avanzamento.

Tanto per curiosita' qualcuno sa come funziona il servizio di booking in modalita' push di fineco? Anche li c'e' un timer o e' l'applet che instaura un canale permanente con il server?

Per intanto grazie.
32 messaggi dal 20 dicembre 2001
www.dinuzzo.it
3) realizzare un servizio windows "ospitato" da iis che faccia il lavoro. La tua pagina aspnet fara' una chiamata asincrona al servizio. Questo detto in maniera molto sintetica.

Perche' un timer? quando il servizio o il webservice finisce dovrebbe entrare in gioco il bello della chiamata asincrona (se non sbaglio il delegato utilizzato per iniziare) che intercetta anche la sua fine.

La cosa interessa anche a me xche' sto cercando di farla per ovviare ad un problema di timeout della pagina a seguito della richiesta di un'elaborazione che impiega molto tempo e risorse.
Modificato da riccardone_70 il 06 febbraio 2004 11.51 -

Ciao
Riccardo
Sì ma il callback c'è sul server, non sul client. L'unico modo è un refresh a timer se non si vuole rischiare il timeout

Ciao

Il mio blog
Homepage
32 messaggi dal 20 dicembre 2001
www.dinuzzo.it
ricciolo ha scritto:
Sì ma il callback c'è sul server, non sul client. L'unico modo è un refresh a timer se non si vuole rischiare il timeout


No, non e' l'unico modo. Nel momento in cui effettuiamo una chiamata asincrona a un servizio windows o un web service, l'elaborazione si sposta su un nuovo thread. L'applicazione chiamante puo' fare quello che dici tu oppure nel momento in cui invoca il metodo in modo asincrono specifica anche il metodo che il delegato chiamera' quando sul server il processo avra' termine (callback).
Dall'msdn sull'argomento
.....
callback argument?Specifies an AsyncCallback delegate instance. If you specify a non-null value for this argument, the runtime calls the specified callback method when the asynchronous method completes. If this argument is a null reference, you must monitor the asynchronous operation to determine when it is complete.
....
Modificato da riccardone_70 il 06 febbraio 2004 20.32 -

Ciao
Riccardo
Sì, ma il callback avviene sempre sul server. Il chiamante, l'applicazione asp.net, chiama in modo asincrono un operazione di un windows service e parte un callback quando ha finito.
Fin qui ci siamo, il problema è avvisare l'utente che non sta sul server. A questo mi riferivo

Ciao

Il mio blog
Homepage
32 messaggi dal 20 dicembre 2001
www.dinuzzo.it
ricciolo ha scritto:
...Fin qui ci siamo, il problema è avvisare l'utente che non sta sul server. A questo mi riferivo


Ci sono tre tecniche utilizzabili che si possono chiamare Pooling, Waiting e Callback.
La tecnica suggerita di utilizzare un timer ricade nelle prime due ma e' la peggiore perche' implica sovraccarico di traffico e occupazione di risorse. Puo' essere giustificata se si vuole ad esempio segnalare all'utente lo stato del processo in corso o condizionarne l'esecuzione.
Se invece si sceglie la strada di utilizzare un delegato che effettui il callback non siamo costretti ad utilizzare nessun "timer". Abbiamo a disposizione una serie di metodi e oggetti come ad esempio l'oggetto di tipo IAsyncResult che ci torna indietro il risultato dell'elaborazione nel metodo che abbiamo indicato al momento della chiamata asincrona grazie al delegato per il callback (AsyncCallback).

Ciao
Riccardo

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.