实体框架,等待结果

时间:2011-04-29 15:56:13

标签: asp.net-mvc ajax entity-framework

我正在编写一些代码,最常见的是,不会从针对Entity Framework的查询返回任何结果。这个请求已经被一些jQuery代码提交了,如果我回复“没有结果”,它就会转过来再次发出相同的请求 - 所以我想在有一些结果可用之前不回复,或者已经过了合理的时间(例如30秒)(但是,我不想将结果缓存30秒 - 30秒是不合理的时间来发送查询的响应 - 如果结果可用,我想要它们“立即”可用)

我如何才能做到最好。我尝试在重新查询之间休息,但它a)似乎没有工作(每个以没有结果开始的请求等待整整30秒),并且b)将绑定一个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 个答案:

答案 0 :(得分:4)

查看此混合11会话:“Pragmatic JavaScript jQuery & AJAX with ASP.NET”。 在它的最后(大约40-45分钟进入会话)有一个演示权给你 我很肯定你会说哇.. 达米安·爱德华兹(Damian Edwards)承诺在他的博客上发布更多有关该技术的内容,但我们尚未看到它......

答案 1 :(得分:0)

参见> Reverse ajax Comet/Polling implementation for ASP.NET MVC?

你需要长时间的民意调查。它基本上向服务器发送请求,服务器只是将其保留在队列中。它会累积所有查询,并在收到一些数据后立即将响应发送到每个排队的请求。

编辑:这也很有趣> Comet implementation for ASP.NET?