2009-07-19 17 views
6

Tengo 2 páginas ASP.IIS no envía dos respuestas al mismo cliente al mismo tiempo (solo para ASP)

I hacer una solicitud a la primera página de Firefox (que tarda 30 segundos en procesar en el lado del servidor), y durante la ejecución de 30 segundos I hacer otra petición de Firefox a la segunda página (se tarda menos de 1 segundo en el lado del servidor), pero aparece después de 31 segundos. Porque espera primeras solicitudes para terminar.

Cuando solicito la primera página desde Firefox y luego solicito la segunda página desde IE, es solo instantánea.

Así que básicamente ASP - IIS 6 de alguna manera limitando a cada cliente a una solicitud (petición de procesamiento largo) a la vez. Necesito solucionar este problema en mi aplicación de cliente .NET.

Esto se prueba en 3 sistemas diferentes. Si desea probar, puede probar las secuencias de comandos ASP al final.

Este comportamiento es el mismo en una ejecución SQL larga o simplemente en una operación ASP que consume tiempo.

Nota:

  • No se trata de HTTP Keep Alive
  • Es límite de conexión no por los persistentes (probamos para aumentar esto en Firefox y en .NET con Net.ServicePointManager.DefaultConnectionLimit)
  • No se trata de User Agent
  • Esto no ocurre en ASP.NET, así que supongo que es algo para el con ASP.dll
  • Estoy tryi ng para resolver esto en el cliente, no en el servidor. No tengo control directo sobre el servidor, es una solución de terceros.

¿Hay alguna forma de evitar esto?

Ejemplo de código ASP:

Primera ASP:

<% 
Set cnn = Server.CreateObject("Adodb.Connection") 
cnn.Open "Provider=sqloledb;Data Source=.;Initial Catalog=master;User Id=sa;Password=;" 
cnn.Execute("WAITFOR DELAY '0:0:30'") 
cnn.Close 
%> 

Segunda ASP:

<% 
Response.Write "bla bla" 
%> 

Respuesta

8

Esto se debe a la manera en que ASP administra las sesiones. El objeto Session tiene un solo subproceso y, por lo tanto, solo se puede acceder mediante un subproceso de trabajador a la vez. Cuando llega una segunda solicitud para la misma sesión que ya está siendo procesada por un hilo existente, esa solicitud es puesta en cola por ASP hasta que el objeto de la sesión sea accesible.

Esto ocurre de manera predeterminada incluso si no usa realmente el objeto de sesión en las páginas en cuestión.

Por lo tanto, cuando realizaba una solicitud de FF y la otra de IE, tenía dos sesiones diferentes, por lo tanto, ambas solicitudes pueden realizarse simultáneamente. Podría haber obtenido el mismo efecto usando dos instancias distintas de IE.

Si sabe que nunca necesita el objeto de sesión, puede acceder a la configuración de la aplicación y desactivarla (esto significa que ninguna página ASP tocará el objeto de la sesión). En este caso, ASP permitiría procesar múltiples solicitudes desde la misma instancia del navegador al mismo tiempo (porque no tendría forma de saber que las solicitudes provenían de la misma instancia del navegador).

Sin embargo, en la mayoría de los casos, el código ASP tiene algún uso para el objeto de sesión (incluso si solo marca una sesión como iniciada). En este caso, tiene este comportamiento a menos que separe las dos páginas ASP que se llaman en aplicaciones separadas.

+0

¡Cómo me perdí la sesión! Bien visto, muchas gracias. –

+2

También puede desactivar la sesión por página con esta variable de página: <% @ EnableSessionState = False%> información sesión creada en otras páginas todavía existe es sólo el motor ASP con saltar la parte donde se hace availalble para esta página solamente. –

0

¿Ha intentado utilizar Response.Flush? Eso podría causar que la salida almacenada en el buffer sea enviada inmediatamente.

+0

No funciona, y tengo que resolver esto en un modo más genérico. Mi .NET Client debería funcionar con cualquier sitio ASP como este. –

0

¿Está configurado IIS (o este sitio web en específico) para tener 1 máx. ¿conexiones concurrentes?

+0

No . . . –

+0

¿Es esto específico para Firefox? ¿Qué hay de 2 solicitudes simultáneas de IE? – shahkalpesh

+0

@shahkalpesh, si eso fuera así usando una instancia de IE separada aún causaría que la solicitud se demore hasta que se complete la de FF. – AnthonyWJones

Cuestiones relacionadas