如何在MVC3中定期调用wcf服务?

时间:2011-11-04 00:41:59

标签: asp.net wcf asp.net-mvc-3

我创建了一个有一个方法的wcf服务:

public List<Mail> GetMailItems()
{
//gets mails from database which were created in last two minutes

return Mails;
}

客户端应用程序是窗口表单,并且有一个刷新按钮可以调用此服务方法。

但是现在,客户端已经要求将MVC3作为客户端应用程序,并且想要一个每秒调用此方法的页面。

有人可以帮我理解如何实现控制器类逻辑,每秒调用一次这个wcf服务方法并更新视图吗?

谢谢

1 个答案:

答案 0 :(得分:4)

如果你的观点是在html中显示结果而不重新加载页面,那么, 我想,你必须看看反向ajax或彗星的结果。

我可能会建议你在这里使用伪代码

//javascript side
function DoRequest() {
    $.post('/myController/Action',
      {},
      function(data) {
          if (data.HasNewMail) {
              //do processing
          }
          DoRequest();
      },
      "json");
}

和控制器端

public class myController : Controller {
    public ActionResult Action(){
        DateTime startTime = DateTime.Now;
        DateTime endTime = startTime.AddMinutes(5);
        while (true) {
            var mails = CheckForMails();
            if (mails.Count() >0) {
                return Json(new {HasNewMail = true; Mails= mails});
            }
            if (DateTime.Now > endTime) {
                return Json(new {HasNewMail = false});
            }
            //wait one second then try again.
            Thread.Sleep(1000);
        }
    }
}

这是最原始的实现。您向您的行动提出请求,并且您的请求不会立即返回但仍被保留。 Action开始每秒检查邮件。当它发现任何要返回时,它会将请求释放给客户端。在javascript中,您可以进行适当的DOM更新并再次发送请求。如果在这5分钟内没有找到任何结果,则返回响应,表示没有邮件。

此外,您可以参考以下链接Websync或查看通过silverlight here直接连接到wcf服务