2012-07-05 14 views
11

Quindi sto pensando a una funzionalità in cui l'utente incolla un collegamento e il codice sul lato server esegue la scansione del collegamento fornito e risponde al contenuto di tale collegamento (ad esempio pagina titolo, descrizione, miniatura, ecc.).Cosa accade in IIS/C# quando una richiesta viene interrotta

L'utente può nel frattempo modificare il collegamento e, in tal modo, la richiesta di ajax deve essere interrotta sul lato client.

Mi chiedo cosa succede esattamente nel server IIS e in particolare al mio codice C#.

  • Il thread di risposta è terminato?
  • L'oggetto Response ora restituisce null o Response.Write genera eccezioni?
  • È stata generata un'eccezione nel thread di risposta mentre si trova? (che non ha senso, ma qualunque)

risposta

4

Se il codice server controlla lo stato di Response.IsClientConnected, può interrompere il lavoro e produrre una risposta vuota quando il client interrompe la richiesta, altrimenti verrà semplicemente completata la richiesta come al solito.

La gestione della richiesta non verrà interrotta automaticamente solo perché non c'è più nessuno ad aspettarlo. Il codice del server deve verificare attivamente lo stato della richiesta.

2

Il server Web non sa che il client ha annullato la richiesta. La richiesta verrà comunque soddisfatta e verrà inviata una risposta. Lo script sul lato client che scrivi dovrà essere in grado di gestire lo stato corrente della tua pagina.

Se si è certi che non vi interessa circa la risposta, mi sento di raccomandare l'interruzione della richiesta lato client:

xhr.abort() 
+1

Quindi il codice del mio server Web è stato completato? quale sarebbe il punto di abortire una richiesta, quindi? – bevacqua

+1

Quindi ci sono solitamente due passaggi (semplificati) per una richiesta Ajax. 1. Dare il via alla richiesta. 2. Fare qualcosa con la risposta (un callback di successo o fallimento). Se si annulla la richiesta, i metodi di callback non dovranno gestire la risposta. –

0

Se si chiude il lato client di connessione prima che la risposta viene scritto un errore che indica tanto è gettato. Potresti semplicemente scegliere di non gestire la risposta quando ritorna dal server.

0

Una volta inviata una richiesta al server, IIS inizierà l'esecuzione del codice lato server. Ora il server può decidere se il codice deve essere eseguito o meno.

Nell'intero ciclo di pagine è possibile controllare Request.IsClientConnected come indicato da Guffa e terminare l'esecuzione.

Ma sì, dipende totalmente dallo scenario che hai.

Spero che aiuti.

Problemi correlati