【问题标题】:How can you implement SignalR in a controller on a watcher event?如何在观察者事件的控制器中实现 SignalR?
【发布时间】: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


【解决方案1】:

您可以找到有关Background tasks with hosted services in ASP.NET Core 的信息和示例。

在托管服务中,编写您在 MyFileWatcher 中找到的相同逻辑。注入 HubContext 以通过 SignalR 发送通知。

Dependency injection in ASP.NET Core

不需要为此在控制器中编写任何逻辑。但是您仍然需要获取文件的初始列表,并且控制器是一个很好的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2016-11-05
    相关资源
    最近更新 更多