165 messaggi dal 22 giugno 2008
Salve.... Ho creato un servizio wcf che, dopo essere stato chiamato, invia un messaggio al client chiamante con un callbcak. Il client in questione è una pagina asp.net.... Gestisco la ricezione del callback da client ed effettivamente il valore che il server invia viene correttente ricevuto dalla pagina ma quest'ultima di aggiornarsi no ne vuole proprio sapere:

Ho messo un updatePanel Con Update mode su "Conditional" e quando viene lanciato l'evento che gestisce la ricezione del callback faccio qual'cosa del genere

  
protected void CallbackRicevuto(string messaggio)  
{  
///Questa label si trova nell'updatepanel  
label1.text=messaggio;  
updatepanel1.Update();  
}  


Steppando in debug la label effettivamente riceve il valore ma il suo render non si aggiorna.... Come fare????
Non funziona perché il web non funziona in push e per aggiornare una pagina c'è bisogno che sia sempre il browser, o direttamente o out of band, ad iniziare una richiesta.

Nel tuo caso procederei in maniera diversa, ad esempio con un servizio invocato in asincrono sfruttando le AsyncPage di ASP.NET, oppure se proprio devi usare il duplex, alla ricezione del messaggio dovresti aggiornare il dato ad esempio in sessione e successivamente fare comunque un polling dal browser con un timer per recuperarlo.

Occhio che secondo me, nel tuo caso, la pagina ti sembra essere ancora "viva" semplicemente perchè hai un riferimento attivo e il GC non può buttarla via, ma penso proprio che l'HttpContext in quella richiesta sia null.

Ciao,
m.
165 messaggi dal 22 giugno 2008
Che l'httpContext fosse null... lo sapevo e tutto quello che dici è verissimo. La tua risposta è eccellente ma.... Deve per forza esserci un modo... insomma... come fa facebook ad implementare una chat?? non credo faccia una richiesta ogni secondo con un timer (anche se possibile). E se si provasse ad implementare in qualche modo L'interfaccia ICallbackEventHandler???? In tutti i modi io continuo a fare ricerche se arrivo da qiualche parte vi posto la soluzione... Ciao e grazie mille del vosro aiuto
Certo che la Facebook Chat va in Get sul server! Basta usare Firebug o qualsiasi software per ispezionare le richieste per accorgersene!

In prima approssimazione potresti fare un polling e richiamare un servizio sul server, la loro è una versione un po' più sofisticata che dà un effetto (artificioso) di real time lavorando più o meno così:
1) A apre la finestra di chat con B e il browser di A manda una Get al server che non risponde, quindi la Get rimane lì a girare in attesa, come quando apri una pagina e questa non si carica
2) Se la get va in timeout, ne viene avviata un'altra
3) Quando il server ha qualcosa da mandare ad A (tipo un messaggio di B, o B che ha iniziato a scrivere e quindi su A deve visualizzarsi "B is typing"), risponde a quella Get che è rimasta pending dando quindi l'effetto del realtime
4) Appena arriva la risposta, A istanzia una nuova Get per lo step successivo.

Poi magari se qualcuno è bravo, può incapsulare la logica delle richieste in una serie di classi javascript (e c# sul server) in modo che utilizzandole si abbia l'illusione di lavorare in push. Ma il web non funziona in push

Ciao!
m.

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.
In primo piano

I più letti di oggi

Media
In evidenza
MISC