ASP.NET MVC y Ajax, ¿solicitudes concurrentes?


AJAX novato aquí!
En este momento en mi ASP.NET MVC web app mis solicitudes AJAX parecen estar recibiendo por lotes o en cola, no estoy seguro.
No parece que se haya completado ninguna solicitud hasta que la solicitud anterior haya terminado.
¿Cómo hago para obtener las solicitudes de devolución de forma independiente?
No necesariamente quiero que alguien me dé la respuesta, pero tal vez algunos enlaces a buenos tutoriales o recursos que podrían ayudar. Gracias

Author: Boob, 2010-02-24

6 answers

Estoy ampliando la respuesta de Lachlan Roche, que es correcta.

El ASP.NET framework realizará solicitudes de"subproceso único" que tratan con el ámbito de sesión (un recurso global), para evitar que una solicitud interfiera con otra. En WebForms creo que puedes usar la directiva Page para especificar que las páginas individuales no usan Sesión y por lo tanto no necesitan ser tratadas sincrónicamente de esta manera.

El problema es que en ASP.NET MVC todas las solicitudes usan Session , porque se utiliza para implementar TempData. Puede deshabilitar el estado de la sesión por completo, como señaló Lachlan Roche, o puede tratar esto caso por caso.

Una posible solución podría ser iniciar sus propios subprocesos en segundo plano para procesar cualquier código de larga ejecución, de modo que la solicitud inicial "se complete" lo más rápido posible.

 36
Author: Seth Petry-Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-24 15:17:41

ASP.NET procesará las solicitudes en serie por sesión a menos que las sesiones estén configuradas como deshabilitadas o de solo lectura en web.config mediante el atributo EnableSessionState en el elemento pages.

Como esta es una configuración de página, esto no afectará a los controladores MVC y aún estarán sujetos al procesamiento de solicitudes en serie.

Curiosamente, incluso con las sesiones deshabilitadas o configuradas en readonly, todavía podemos leer y escribir datos de sesión. Parece que solo afecta a la sesión bloqueo que causa el procesamiento de solicitudes en serie.

<system.web>
    <pages enableSessionState="ReadOnly"/>
</system.web>

Las páginas también pueden tener una propiedad EnableSessionState, aunque esto no es relevante para las vistas MVC.

<%@ Page EnableSessionState="True" %>
 34
Author: Lachlan Roche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-24 15:45:12

Con el lanzamiento de ASP.MVC 3 ahora puede agregar un atributo a sus controladores para marcar la sesión como readonly, lo que permite que las acciones se llamen simultáneamente desde el mismo cliente.

Soporte de controlador sin sesión:

El controlador sin sesión es otra gran novedad en ASP.NET MVC 3. Con Sessionless Controller puede controlar fácilmente el comportamiento de la sesión de los controladores. Por ejemplo, puede hacer que la sesión de su HomeController esté deshabilitada o solo de lectura, permitir la ejecución concurrente de solicitudes para un solo usuario. Para obtener más información, consulte Solicitudes Concurrentes En ASP.NET MVC y HowTo: Controlador sin sesión en MVC3 – ¿qué y por qué?.

- de este artículo de DZone.

Al agregar SessionState(SessionStateBehaviour.Disabled) a su controlador, el tiempo de ejecución le permitirá invocar varias acciones simultáneamente desde la misma sesión del navegador.

Desafortunadamente no creo que haya una manera de marcar una acción para desactivar solo el sesión cuando se llama a esa acción, por lo que si tiene un controlador que tiene algunas acciones que requieren la sesión y otras que no, deberá mover las que no lo hacen a un controlador separado.

En versiones posteriores de ASP MVC puede decorar clases de controladores individuales con el SessionStateAttribute

[System.Web.Mvc.SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : Controller 
{
}
 30
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-02 16:04:48

Desde que se lanzó. NET Framework v3. 0, puede usar la enumeración "SessionStateBehavior" con SessionStateAttribute:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : BaseController { }
 2
Author: Odrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-06 15:54:53

Bien Solicitud concurrente son más dependientes del navegador aswell si se dispara supongamos 10 solicitud concurrente a una acción Utilizando AJax en Mozilla y el mismo uso de IE 8 entonces usted encontrará que Mozilla tiene estilo para disparar una solicitud de espera para su respuesta y luego el fuego segundo y así sucesivamente... para esto es una por una base, mientras que en IE * este fuego sobre 6 solicitud concurrente a la vez al Servidor.

Así que las solicitudes concurrentes también dependen del tipo de navegador.

 -2
Author: Vishal Patwardhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-27 07:15:35

Sugiero usar jQuery para sus necesidades de ajax con asp.net mvc, lo he usado exclusivamente y ha sido extremadamente fácil.

En cuanto a los tutoriales, miraría esto: http://docs.jquery.com/Ajax

Hay un montón de opciones para jugar y también sugiero descargar firebug para que pueda ver las solicitudes de lanzamiento desde su página de forma asíncrona y ver si se disparan y lo que devuelven, etc.

Al igual que el otro lado de guy, las solicitudes AJAX son asíncronas y no obtienen en cola y todos regresan de forma independiente cuando terminan, por lo que si miras en firebug será fácil ver lo que está pasando detrás de escena y antes de que el depurador sea golpeado

 -5
Author: Jimmy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-24 14:53:58