【发布时间】:2019-08-12 17:54:46
【问题描述】:
我有一个工作项目,我必须为实时推送事件添加 SignalR,但我不知道该怎么做。
事件来自正在寻找新文件的观察者,这些文件被读取,内容被添加到数据库中,然后被添加到网页中。 内容应在创建时显示在页面上,无需刷新。
当前控制器从数据库中获取数据并将其发送到显示它的视图。
我跟着this 开始工作,但我不知道当控制器是客户端时如何实现 SignalR。
这是我的控制器:
public class PropertyController : Controller
{
private readonly DataAccess data;
public PropertyController(DataAccess data)
{
this.data = data;
}
public ActionResult ViewProperties()
{
/*
* Puts the data that I want to show in result
*/
//Do I have to write something here?
return View(result);
}
}
观察者:
private readonly IHubContext<PropertyHub> _hubContext;
//FileWatcher constructor with the HubContext injection
private static void OnChanged(object sender, FileSystemEventArgs e)
{
_hubContext //Don't know what to write here...
}
我真的不明白 DI 在我的情况下是如何工作的。
【问题讨论】:
-
您的观察者应该连接到集线器,并调用一个方法告诉它发生了新事件。然后,集线器应该调用相关客户端上的方法,传递事件数据(或至少告诉他们执行刷新)。这很可能意味着您的控制器根本不应该是客户端。相反,在用户浏览器中运行的一些 JavaScript 将成为客户端。
-
我认为您需要更多地阅读文档,因为您缺少对 SignalR 的功能和 MVC 控制器的功能的基本理解。它们都习惯于与客户端对话,而不是与应用程序的不同部分对话。由于通信协议的双向特性,SignalR 用于与客户端进行实时通信。 MVC 用于响应客户端发起的 HTTP 请求。
-
通过遵循本教程,我能够获得一个简单的客户端/服务器设置,其中我将
HTTP POST消息发送到端点,然后将pushed 发送给客户端(在浏览器中):@ 987654322@ -
我对 javascript 真的很不舒服,我不知道在 js 文件中放什么来显示数据。对于 SignalR 和其他所有内容,我非常努力地理解文档,但我在技术方面遇到了麻烦。我会看看能不能找到js的东西。谢谢。
标签: c# asp.net-core model-view-controller signalr