Possiedo un servizio Windows che ospita tre diversi canali WCF duplex. I client possono connettersi per ricevere gli aggiornamenti inviati tramite il loro contratto di callback. Essenzialmente ci sono tre canali pub-sub.WCF: chiusura di un servizio duplexServeri di blocco per la durata CloseTimeout se chiusi quando i client sono connessi
Questo servizio richiede molto tempo per rimbalzare quando i client sono connessi. La chiamata a ServiceHost.Close
richiede 10 secondi per tornare (quindi il servizio impiega più di 30 secondi per fermarsi.) Si scopre che il mio closeTimeout
in configurazione è di 10 secondi. La modifica di questo valore indica che questa è la causa del problema.
Cosa devo fare per chiudere il canale tempestivamente? Non mi piace l'idea che qualcosa stia scadendo. Potrei chiamare Abort
, ma sembra che ci debba essere un modo migliore. Non l'ho mai visto su canali non duplex, quindi supponiamo che abbia a che fare con il duplex.
Idealmente, il client verrebbe informato immediatamente che il canale ha avuto un errore, in modo che l'utente possa vedere immediatamente che gli aggiornamenti si sono fermati.
Hai provato questo? Cosa vuol dire che l'altra estremità del canale non bloccherà anche per 'CloseTimeout'? –
Questo è il modo in cui utilizzo WCF e non ho mai avuto problemi come il tuo. Potrebbe essere coincidente, potrebbe non esserlo. Ho appena condiviso la mia esperienza. – adontz