我创建了一个有一个方法的wcf服务:
public List<Mail> GetMailItems()
{
//gets mails from database which were created in last two minutes
return Mails;
}
客户端应用程序是窗口表单,并且有一个刷新按钮可以调用此服务方法。
但是现在,客户端已经要求将MVC3作为客户端应用程序,并且想要一个每秒调用此方法的页面。
有人可以帮我理解如何实现控制器类逻辑,每秒调用一次这个wcf服务方法并更新视图吗?
谢谢
答案 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分钟内没有找到任何结果,则返回响应,表示没有邮件。