我正在使用C#MVC5和EF6构建博客应用程序。我在一些地方使用SignalR,但我现在正在尝试设置它,以便主页上的用户(显示最新博客的列表)将自动将新博客添加到顶部,如果他们'添加了一个在页面上。为此,我设置了一个计时器,每隔60秒检查一次数据库,看看自上次检查后是否添加了博客。
//This is called every 60 seconds.
public void CheckForNewBlogs(object state)
{
//check if there has been a new blogs since last check
List<BlogViewModel> blogs = blogRepo.GetBlogs().Where(a => a.Created > lastTimeChecked).Select(a => new BlogViewModel(a, user)).ToList();
lastTimeChecked = DateTime.Now;
foreach (BlogViewModel blog in blogs)
{
BroadcastNewBlog(blog);
}
}
这就是我的问题所在,我可以为新博客创建一个模型,但我无法弄清楚如何创建部分视图以通过SignalR发送给客户。
在使用SignalR的其他情况下,它都在Controller中,因此我使用了PartialViewToString函数。我是否必须创建控制器的实例,还是有更好的方法?
任何帮助表示赞赏。感谢。
答案 0 :(得分:1)
我不会通过SignalR推送视图。我将推送一个事件,警告页面存在一个带有给定URL的新博客帖子,然后页面可以继续以通常的方式获取该页面/视图。
另外,我没有计时器来检查数据库中是否有新内容。创建新帖子时,作为创建的最后一步,我将播放一个事件,表示新帖子与以前一样存在。
要通过SignalR推送ASP.NET MVC生成的视图,您必须模拟一个请求并经历许多麻烦,这将导致无用的许多ASP.NET功能,如安全性。此外,如果您通过SignalR推送视图,则无法从HTTP缓存中获益。