2012-07-05 19 views
11

Así que estoy pensando en una funcionalidad donde el usuario pega un enlace y el código del lado del servidor rastrea el enlace proporcionado y responde con el contenido de ese enlace (como página título, descripción, miniatura, etc.).Qué sucede en IIS/C# cuando se cancela una solicitud

Mientras tanto, el usuario puede cambiar el enlace, y al hacer eso, la solicitud de ajax debe abortarse en el lado del cliente.

Me pregunto qué sucede exactamente en el servidor IIS y específicamente en mi código C#.

  • ¿Se ha terminado el hilo de respuesta?
  • ¿El objeto Response ahora devuelve nulo o Response.Write throw exceptions?
  • ¿Se ha lanzado una excepción en el hilo de respuesta donde sea? (Eso ni siquiera tiene sentido, pero lo que sea)

Respuesta

4

Si el código del servidor comprueba el estado de Response.IsClientConnected, puede detener el trabajo y producir una respuesta vacía cuando el cliente aborta la solicitud, de lo contrario, simplemente completará la solicitud como de costumbre.

El manejo de solicitudes no se cancelará automáticamente solo porque ya no hay nadie esperándolo. El código del servidor debe verificar activamente el estado de la solicitud.

2

Su servidor web no sabe que el cliente canceló la solicitud. La solicitud se seguirá cumpliendo y se enviará una respuesta. El script del lado del cliente que escriba tendrá que ser capaz de manejar el estado actual de su página.

Si está seguro de que no se preocupan por la respuesta, yo recomendaría abortar el lado del cliente solicitud:

xhr.abort() 
+1

¿El código de mi servidor web se ejecuta hasta el final? ¿Cuál sería el objetivo de abortar una solicitud, entonces? – bevacqua

+1

Por lo general, hay dos pasos (simplificados) para una solicitud de Ajax. 1. Inicia la solicitud. 2. Haga algo con la respuesta (una devolución de llamada exitosa o fallida). Si cancela la solicitud, sus métodos de devolución de llamada no tendrán que gestionar la respuesta. –

0

Si cierra el lado del cliente de conexión antes de la respuesta se escribe un error que indica tanto se arroja. Podrías elegir no manejar la respuesta cuando vuelva del servidor.

0

Una vez que se envía una solicitud al servidor, el IIS comenzará a ejecutar el código del lado del servidor. Ahora el servidor puede decidir si el código necesita ser ejecutado o no.

En todo el ciclo de la página puede marcar Request.IsClientConnected como lo menciona Guffa y finalizar la ejecución.

Pero sí, depende totalmente del escenario que tenga.

Espero que ayude.

Cuestiones relacionadas