2013-09-02 7 views
1

я следующий метод в моем GenericHandler.ashx:

private void T1() 
{ 
    System.Threading.Thread.Sleep(2000); 
    Ctx.Response.Write(Serializer.Serialize(new { foo = "bar" })); 
} 

Если я 2 $.ajax -calls обработчика одновременно, я получить первый ответ после 2 секунды, а следующий после 4.

Есть ли способ сделать мой GenericHandler.ashx обрабатывать оба вызова ajax одновременно?

+0

Вы серьезно 'Sleep'ing в веб-сервиса? – cHao

+0

Он использует его для тестирования. Думаю, – Papa

+0

@cHao Да, для демонстрационных целей. – Johan

ответ

2

What you seem to need is a Asynchronous HTTP Handler

Во время обработки асинхронного обработчика HTTP, ASP.NET помещает нить, которая обычно будет использоваться для внешнего процесса обратно в пуле потоков до тех пор, пока не получит обработчик обратного вызова из внешний процесс. Это может предотвратить блокирование потоков и улучшить производительность , поскольку в то же время может выполняться только ограниченное число потоков . Если многие пользователи запрашивают синхронные обработчики HTTP, то полагаются на внешние процессы, операционная система может быстро исчерпать потоков, потому что многие потоки заблокированы и ждут внешний процесс .

Вы тело текущего метода будет находиться в StartAsyncTask теле метода предоставленному например

0

Вам необходимо загрузить jquery.unobtrusive-ajax один раз во время сеанса. Проверьте, не загружена ли она:

if (Request.Headers["X-Requested-With"] != "XMLHttpRequest") 
{ 
    Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js"); 
} 
+0

Что именно будет делать скрипт? – Johan

+0

Проверяет, запросил ли запрошенный заголовок файл ненавязчивого jquery или нет. Посмотрите на это http://stackoverflow.com/questions/11326792/asp-net-mvc-3-and-jquery-unobtrusive-ajax-min-js –

0

Не видя ваших параметров для $ .ajax, я предполагаю, что вам нужно установить async в true.

$.ajax({ 
    url: "page.ashx", 
    async: true 
}); 

Кроме того, обратите внимание, что разные браузеры реагируют по-разному в зависимости от количества запросов, которые он позволяет сразу.

Check out async.

+0

Зачем мне делать синхронный вызов? Весь смысл с $ .ajax состоит в том, чтобы использовать асинхронную часть. – Johan

+0

Извините, я имел в виду истину. – Papa

+0

Вы вызываете метод с одним вызовом ajax дважды или два блока кода один за другим одним способом? Я думаю, что поведение может быть вызвано тем, что он ждет завершения метода. См. Http://stackoverflow.com/a/4428894/2637902 – Papa

Смежные вопросы