首页 文章

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

提问于
浏览
1

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

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

return Mails;
}

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

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

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

谢谢

1 回答

  • 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服务

相关问题