我正在编写一些代码,最常见的是,不会从针对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);
}
}
答案 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?