Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002

    [asp.net 2.0] messaggi realtime

    ciao a tutti,
    sto facendo un'applicazione web che fa delle lunghe procedure....dato che sembra che nel momento che le routine si svolgono il soft sia fermo,vorrei sapere (dato che so che occorre javascript,ma non lo so usare)come aggiornare una label o textbox in real-time ,come applicazioni winform.

    Insomma c'è qualche anima gentile che mi scrive uno script ???.

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Pietro

  3. #3
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    nn credo sia quella la soluzione ,perchè con i thread gia ci ho provato,infatti se il thread principale finisce ,e quello secondario ancora no...purtroppo il server non ritorna finchè anche il thread secondario non finisce....ma sono pronto alla smentita (magari).

    Cmq ora sto provando grazie a delle persone la via dello javascript.

    Per adesso grazie a tutti e se volete approfondiamo la cosa.

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da cassano
    nn credo sia quella la soluzione ,perchè con i thread gia ci ho provato,infatti se il thread principale finisce ,e quello secondario ancora no...purtroppo il server non ritorna finchè anche il thread secondario non finisce....ma sono pronto alla smentita (magari).

    Cmq ora sto provando grazie a delle persone la via dello javascript.

    Per adesso grazie a tutti e se volete approfondiamo la cosa.
    Evidentemente non hai abbastanza fede o forse non sei riuscito a cogliere l'essenza dell'articolo. Infatti, tu hai la pagina A che lancia un processo asincrono lungo B.
    Il processo B notifica il suo stato, nella zona comune cache.

    Perciò, la pagina A, la prima volta lancia il processo B, le altre volte interroga la cache per stabilire l'evoluzione di B.
    Adesso interviene javascript.

    A può mandare la prima e le altre richieste tramite ajax: la prima per far partire il processo B, le altre per conoscere la sua evoluzione.

    Perciò, la prima volta si lancia B col click di un pulsante, le altre si lanciano con un temporizzatore.

    Detto questo, per procedere, bisogna aver capito l'articolo proposto, poi, utilizzare ajax, è una classica cazz... Non so se mi sono spiegato. Ciao
    Pietro

  5. #5
    Ho dato un'occhiata veloce all'articolo. Credo si dovrebbe migliorare non usando ad esempio la cache. Se infatti e' vero che cosi puoi anche spegnere il computer e tornare dopo un certo tempo e' anche vero che 9 su 10 l'utente aspetta il risultato. Senza contare che cosi facendo, le risorse che il server web destina alla cache si gonfierebbero in caso di un gran numero di accessi e di gente che clicca e poi se ne va. Quindi legherei semmai alla session il risultato. Poi anche la pagina html che fa il refresh non e' granche'.
    Di solito quando chiamo in maniera asincrona delle funzioni lente io uso i delegati.
    Chiamo la funzione (magari esposta da un webservice) in modo asincrono specificando che la funzione A gestira' il risultato; la funzione A mette in un oggetto session (quindi senza bisogno di guid vari) il risultato; l'utente fa altre cose e quando torna sulla pagina o preme un certo tasto se il risultato e' presente in session lo visualizza altrimenti si visualizza un messaggio "procedura in corso".
    Da approfondire i limiti che l'articolo se non ho capito male sottolinea all'inizio nell'utilizzo di questa tecnica.
    Saluti a tutti
    Riccardo

  6. #6
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    l'utente fa altre cose e quando torna sulla pagina o preme un certo tasto se il risultato e' presente in session lo visualizza altrimenti si visualizza un messaggio "procedura in corso".
    lo devo riprovare bene perche non ho capito se fa al caso mio oppure no (colpa mia evidentemente).

    Allora penso ad alta voce,se io avvio una procedura che diciamo mi stampa 200 fogli,il server non ritorna fino a che la procedura termini.Se io nel frattempo della procedura volessi una scritta attendere prego documento n° XX in stampa ,questo metodo potrebbe essermi utile ???

  7. #7
    Quello che chiedi tu (al di la di cosa fai nella procedura lenta sia che inserisci un milione di record sia che stampi la divina commedia) si puo' fare in entrambi i modi solo che devi imparare a chiamare le funzioni "lente" in maniera asincrona e attraverso l'uso di delegati o di altri artifizi (come quello suggerito nell'articolo) accorgerti quando la funzione e' finita.

    La procedura lenta la metti ad esempio in un progetto libreria. Crei un web service che fa riferimento a questa libreria ed espone un web method al mondo esterno che permette di iniziare la procedura.
    Come forse saprai, quando aggiungi un riferimento ad un web service vstudio (o chi per lui) e' cosi intelligente da crearti gia' tutti i metodi asincroni per chiamare il web service es. begin_nomefunzione end_nomefunzione.
    Di seguito ti posto un esempio funzionante che utilizza un web service il cui riferimento nel progetto web l'ho chiamato datiremoti e che e' costituito da una pagina dati.asmx che espone un webmethod GetClienti.

    codice:
    'Questo metodo viene chiamato quando si vuole iniziare la procedura lenta
    Sub CallAsync()
            If Session("callBackResult") Is Nothing Then
                If Not callStarted Then                
                    Dim ws As New DatiRemoti.Dati
                    Dim ar As IAsyncResult
                    ar = ws.BeginGetClienti(parametrivari, AddressOf RisultatiCallBack, ws)
                    callStarted = True
                    SetMessage("caricamento in corso")
                Else
                    SetMessage("Procedura gia iniziata")
                End If
            Else
                Dim ds As DataSet = CType(Session("callBackResult"), DataSet)
                ds.DataSetName = "Clienti"            
                SetMessage("Procedura terminata correttamente")
            End If
        End Sub
    
    'Questo metodo viene chiamato quando finisce quello asincrono 
        Sub RisultatiCallBack(ByVal ar As IAsyncResult)
            Dim ws As DatiRemoti.Dati
            Dim ds As DataSet
    
            ws = DirectCast(ar.AsyncState, DatiRemoti.Dati)
            ds = ws.EndGetClienti(ar)
            callStarted = False
            Session("callBackResult") = ds
        End Sub
    
    Private Property callStarted() As Boolean
            Get
                If Not Session("CallStarted") Is Nothing Then
                    Return CType(Session("CallStarted"), Boolean)
                End If
                Return False
            End Get
            Set(ByVal Value As Boolean)
                Session("CallStarted") = Value
            End Set
        End Property
    Saluti a tutti
    Riccardo

  8. #8
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    si si li so usare grazie al Balena e dino esposito grazie del consiglio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.