Sto utilizzando il servizio WCF sincrono che funziona bene il 99% delle volte, ma in alcune rare occasioni il client va in timeout prima che il server termini l'elaborazione. C'è un modo per rilevare, sul lato SERVER, che il client è scaduto? Potrei usare l'operazione asincrona, ma in questo caso il rilevamento del timeout sul lato server mi farebbe risparmiare un bel po 'di lavoro. Sto usando il binding net.tcp, se questo è importante.Come rilevare l'eccezione di timeout del client sul lato server?
risposta
Per net.tcp, http, ecc. In generale n. (vedere i commenti sopra per alcune idee, potrebbe anche essere diverso per altri protocolli/collegamenti/ecc.)
Il motivo è che il codice dell'infrastruttura WCF sul lato server non utilizzerà il canale prima di aver completato l'esecuzione del il codice di implementazione dell'operazione di servizio e il marshalling della risposta. Solo allora tenterà di inviare la risposta e a questo punto riconosce che la connessione è già stata interrotta dal client.
Quando il server riceve questo errore, il codice utente (l'implementazione dell'operazione di servizio) è già stato eseguito e quindi non è più possibile reagire da lì. Potrebbe essere possibile da un dispatcher o da un altro punto di estensione, ma personalmente non ho provato. Tuttavia, anche questo non salverebbe il tuo server dal lavoro non necessario, perché come detto, la disconnessione del client verrà comunque riconosciuta solo quando il server tenta effettivamente di inviare la risposta.
Un modo "semplice" per mitigare tali problemi potrebbe essere quello di dividere il lavoro in corso in diverse operazioni/chiamate di servizio (se possibile, e non introducendo accidentalmente lo stato lato server nel processo). O come altri hanno detto, il client deve implementare un'interfaccia "Ping" che il server può utilizzare per verificare se il client è ancora "vivo" e la risposta è ancora necessaria.
- 1. Gestione del timeout della sessione sul lato client
- 2. Reagire sul lato server e sul lato client non trasparente
- 3. Node.js: Templating sul lato client Modellazione lato server v/s
- 4. Utilizzo del nodo-ncurses sul lato client tramite script sul lato server?
- 5. Come utilizzare le regole di convalida sia sul lato client che sul lato server?
- 6. Logica lato client O logica lato server?
- 7. CSS sul lato server?
- 8. Intercettazione di azioni GSP Grails sul lato client o server
- 9. Impostazione del timeout lato client per richiesta con Alamofire [swift]?
- 10. Verifica cross-browser delle dimensioni del file sul lato client prima di caricarlo sul server?
- 11. Utilizzare meno lato del server preprocessore css o lato client
- 12. Quando utilizzare lato client o lato server?
- 13. GWT I18N sul lato server
- 14. jQuery modelli sul lato server
- 15. Posso usare webpack sul lato client senza server nodejs?
- 16. La convalida JSF è sul lato client o sul lato server?
- 17. Come si sincronizzano il codice lato server e lato client?
- 18. Come si usa require.js sul lato server?
- 19. Come emettere l'evento SocketIO sul lato server
- 20. Lato server MVC + Lato client MVC
- 21. Ruby: lato client o lato server?
- 22. Come confermare l'accesso dell'app Facebook lato client dal lato server
- 23. Gestione di WinRT StreamSocket disconnette (lato server e lato client)
- 24. Scripting lato client e linguaggi di scripting lato server
- 25. Compressione file prima del caricamento sul lato client
- 26. Come includere javascript sul lato client di node.js?
- 27. React-Redux token sul lato client
- 28. Ritaglia e carica l'immagine sul lato client senza codice lato server coinvolge
- 29. Come ottenere l'ID di sessione sul lato client? (WebSocket)
- 30. RegisterOnSubmitStatement dopo la convalida sul lato client
Async non cambierebbe il modo in cui funzionano i timeout. – usr
Le operazioni asincrone WCF non hanno valori di ritorno e non aspettano che l'operazione venga completata sul lato server. I miei timeout si verificano a causa dell'elaborazione (occasionale) sul lato server, senza problemi di rete. Pertanto l'operazione asincrona risolverebbe questo problema, ma sto cercando una soluzione diversa. –
Quando si dice WCF asincrona, si sta parlando di "async/await', o dei contratti di operazione OneWay? Dal tuo commento, sembra un'operazione OneWay. Per quanto riguarda il rilevamento del timeout sul client, non sono sicuro che potresti farlo, dal momento che è sul lato client. Il server dovrebbe avere modo di interrogare il client per vedere se era ancora attivo, forse un collegamento duplex. – Tim