структура сущности, ждать результатов - PullRequest
3 голосов
/ 29 апреля 2011

Я пишу некоторый код, в котором, как правило, результаты не возвращаются из запроса к Entity Framework. Этот запрос был отправлен с помощью некоторого кода jQuery, и если я отвечу «без результатов», он просто развернется и снова сделает тот же запрос - поэтому я бы не хотел отвечать, пока не будут получены какие-либо результаты или прошло достаточное количество времени (например, 30 секунд) (однако я не хочу кэшировать результаты в течение 30 секунд - 30 секунд - это разумное время, чтобы не отправлять ответ на запрос - если результаты станут доступны, я хочу они доступны "сразу")

Как мне лучше поступить об этом. Я пробовал спать между повторными запросами, но это а) не похоже на работу (каждый запрос, который начинается без результатов, ждет полных 30 секунд), и б) свяжет поток asp.net.

Так как мне преобразовать мой код, чтобы не связывать потоки asp.net и отвечать, как только будут получены результаты?

[HttpGet]
public ActionResult LoadEventsSince(Guid lastEvent, int maxEvents)
{
    maxEvents = Math.Min(50, maxEvents);    //No more than 50
    using (var dbctxt = new DbContext())
    {
        var evt = dbctxt.Events.Find(lastEvent);
        var afterEvents = (from et in evt.Session.Events
                     where et.OccurredAt > evt.OccurredAt
                     orderby et.OccurredAt
                     select new { EventId = et.EventId, EventType = et.EventType, Control = et.Control, Value = et.Value }).Take(maxEvents);

        var cycles = 30;
        while (afterEvents.Count() == 0 && cycles-- > 0)
        {
            System.Threading.Thread.Sleep(1000);
        }
        return Json(afterEvents.ToArray(), JsonRequestBehavior.AllowGet);
    }
}

Ответы [ 2 ]

4 голосов
/ 30 апреля 2011

проверьте этот микс 11 сессия: « Прагматичный JavaScript jQuery & AJAX с ASP.NET ». В самом конце (примерно через 40-45 минут) у вас есть демо-версия.
Я уверен, что ты скажешь вау ..
Дамиан Эдвардс пообещал опубликовать больше о технике в своем блоге, но мы еще не увидели это.

0 голосов
/ 29 апреля 2011

См.> Обратная реализация кометы / опроса ajax для ASP.NET MVC? .

Вам нужно пройти длинный опрос.Он в основном отправляет запрос на сервер, а сервер просто сохраняет его в очереди.Он накапливает все запросы и, как только получает некоторые данные, отправляет ответ на каждый из поставленных в очередь запросов.

EDIT : Это также интересно> Реализация Comet для ASP.NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...