2009-03-20 11 views
5

Come posso gestire le disconnessioni del client WCF?Come gestire il disconnessione del client WCF

Ho provato CallBacks ma sembra funzionare solo quando Client Disconnect "chiaramente" utilizzando un pulsante "Disconnect", ad esempio.

Desidero ricevere una notifica al server quando il client è disconnesso, anche in caso di arresto manuale o arresto anomalo del processo client.

+0

La tua domanda non è chiara. Stai cercando di riconnettersi in un timeout o hai una connessione/disconnessione manuale? –

+0

Voglio che il mio server venga avvisato quando il client è disconnesso, anche in caso di disconnessione manuale o arresto anomalo del processo client –

risposta

0

Perché non disporre di un ciclo in cui il client esegue il ping del servizio ogni secondo o così e quindi effettua una richiamata. quando il callback fallisce, il client si è disconnesso.

0

Una variazione sul polling sarebbe quella di utilizzare la messaggistica. Il client potrebbe pubblicare un messaggio "Sono qui" e quindi eliminare il messaggio quando si disconnette. Il server potrebbe monitorare la coda per disconnessioni. Un'altra opzione è utilizzare BOSH, comunicazione HTTP bidirezionale. Questo è ciò che i client di chat web usano.

7

Utilizzare gli eventi OperationContext.Current.Channel.Faulted e OperationContext.Current.Channel.Closed.

Questi eventi vengono generati quando il client si disconnette per qualsiasi motivo.

+0

L'evento OperationContext.Current.Channel.Closed non viene attivato per me in qualsiasi momento ... Desidero che un evento venga attivato quando esco dal client WinForm ... Sto usando wsDualHttpBinding in WCF. Come usi questo evento? – Oliboy50

0

Direi che se il client si disconnette in modo anomalo, non c'è modo di assicurarsi che il server ne sia a conoscenza. È praticamente come HTTP. Se chiudiamo il browser, diciamo con una forza chiusa, il browser non invierà nulla al server.

Questo è uno dei molti motivi per cui abbiamo il timeout della sessione. Per disconnettere un client e ripulire dal lato server tutto ciò che viene utilizzato se un client fa qualcosa di sbagliato (operazioni troppo lunghe per esempio) o disconnette senza far sapere al server.

0
if (HttpContext.Current.Response.IsClientConnected == false) 
{ 
..} 

può aiutare a

Problemi correlati