2015-08-28 14 views
5

Sto provando a controllare la durata massima totale di una singola connessione in HttpListener. Sono a conoscenza della proprietà TimeoutManager e dei 5 valori di timeout diversi che contiene, ma non è chiaro se l'impostazione di ciascuno di questi valori comporterà il totale delle posizioni in cui può verificarsi un ritardo in una connessione.HttpListener che imposta un timeout di connessione totale

Sto cercando qualcosa di più sulla falsariga di: "Se abbiamo una connessione che dura più di x dal momento di aprire la connessione fino ad ora, interrompila senza inviare altro o aspettando qualcos'altro."

EDIT

Per chiarire, lo scenario che stavo sperimentando con il server comporta cercando di inviare la risposta e il cliente non riceve. Ciò causa HttpListenerResponse.OutputStream.Write() da appendere indefinitamente. Stavo cercando di trovare un metodo che posso chiamare da un altro thread per interrompere la connessione. Ho provato a utilizzare OutputStream.Close() e ottenuto Cannot Close Stream until all bytes are written. Ho anche provato HttpListenerResponse.Abort() che non ha prodotto alcun effetto visibile.

risposta

3

Nessuna di queste proprietà farà quello che vuoi. HttpListener ha lo scopo di controllare il flusso delle richieste, i dati in entrata e in uscita, quindi non gestisce il tempo che intercorre tra il momento in cui la risposta è stata completamente ricevuta e quando si invia una risposta, è responsabilità dell'utente occuparsi di esso.

È necessario creare il proprio meccanismo per interrompere la richiesta se il tempo totale è maggiore di quello desiderato, basta un timer può essere sufficiente, quando viene creata una nuova connessione accodare un timer con il timeout totale come tempo di scadenza, se la richiesta termina prima che il timer scada, cancella il timer, altrimenti il ​​timer interrompe la richiesta.