2011-09-01 13 views
5

Si sta tentando di ottenere un servizio WCF per sapere quando un client è disconnesso.Gestione del client disconnessione nel servizio WCF duplex

Dopo aver letto questo articolo wcf notification on disconnect sono riuscito a far funzionare un progetto di test.

Il client e il server rimangono aperti finché non chiudo il client, quindi l'evento OperationContext.Current.Channel.Closed sembra sparare dopo la scadenza del timeout nella riga sottostante.

<reliableSession enabled="true" ordered="true" inactivityTimeout="00:01:00" /> 

Dopo aver testato questo ha funzionato come volevo ho poi cercato di integrarla in un progetto più ampio che ho.

Questo sembra comportarsi in modo diverso in quanto OperationContext.Current.Channel.Closed si attiva anche dopo l'ora specificata nella configurazione <reliableSession ordered="true" inactivityTimeout="00:01:00" /> anche quando il client è ancora aperto.

Le cose che ho notato sono diverse è il fatto che non posso specificare una proprietà enabled = "true" nella configurazione. Anche il secondo progetto utilizza WSDualHTTPBinding mentre il primo utilizza WSHTTPBinding.

La mia domanda è perché il secondo progetto si comporta in questo modo e come posso farlo comportarsi come il primo?

Se avete bisogno di file di codice o post di configurazione, fatemelo sapere e li otterrò subito.

Cordiali saluti

Ash

+0

Quali sono le piattaforme su cui è in esecuzione il client? –

risposta

2

Il protocollo HTTP è intrinsecamente stateless e puramente richiesta/risposta. Come funziona WSDualHTTPBinding è che apre i canali sia sul server che sul client, quando il server è pronto per inviare un messaggio che userà il canale che è ospitato dal client per inviare il messaggio. Quindi quello che potrebbe accadere è che la connessione sul client è aperta, nulla viene ascoltato per un minuto perché viene rilevato come "inattivo" e quindi il client chiude la connessione. Non sono sicuro di quali siano le tue esigenze ma potresti prendere in considerazione il passaggio a TCPBinding poiché si tratta di una connessione stateful.

Il client è in grado di ricevere messaggi dal server? I messaggi vengono inviati regolarmente? Sei sicuro che il client stia effettivamente tenendo aperta la connessione?

+0

Ciao Jason, grazie per la risposta. Riceverò le risposte alle tue domande e le inserirò qui a breve. – user589195

Problemi correlati