【问题标题】:Route To Take With SqlDependency OnChange使用 SqlDependency OnChange 采取的路线
【发布时间】:2018-12-18 20:10:12
【问题描述】:

我正在尝试将实时更新集成到我的 ASP.NET WebAPI 中,但可以这么说我已经碰壁了。我已经设置了我的应用程序(在前端使用 Angular),并且我已经有了它,所以当页面最初加载时,它会从我的 SQL 数据库发出一个获取请求,并且网页会加载这些数据。这些数据变化非常频繁,我想合并实时更新。我将后端设置为使用 SqlDependency 在数据库发生更改时通知我,但是我不知道从这里去哪里。我试图让 SignalR 与我的 OnChange 事件处理程序一起工作 SqlDependency 但我没有在网上看到太多关于此的内容。然后我认为使用 Angular 并尝试轮询可能会更容易,但我还是没有看到如何将它与我的 OnChange 事件处理程序结合起来。关于我可以在数据库已更改的服务器和客户端之间进行通信的最简单方法的任何想法?

【问题讨论】:

    标签: c# asp.net client-server onchange sqldependency


    【解决方案1】:

    您可以使用SignalR 之类的 websocket 技术。它有三种风格:ASP.NET SignalR、ASP.NET Core SignalR 和 Azure SignalR(SignalR 以 Azure 作为主干)。比较每个版本herehere

    您应该从 IHubContext 获取上下文并将其连接起来,如您所见 here:

    public class HomeController : Controller
    {
        private readonly IHubContext<NotificationHub> _hubContext;
    
        public HomeController(IHubContext<NotificationHub> hubContext)
        {
            _hubContext = hubContext;
        }
    }
    

    根据文档,IHubContext 可能在以下情况下使用:

    IHubContext 用于向客户端发送通知,不用于调用 Hub 上的方法。

    现在,要连接客户端,您可以选择正确的技术(javascripttypescript 等)。可以在此处找到示例(来自 microsoft docs):

    "use strict";
    
    var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
    
    //Disable send button until connection is established
    document.getElementById("sendButton").disabled = true;
    
    connection.on("ReceiveMessage", function (user, message) {
        var li = document.createElement("li");
        document.getElementById("messagesList").appendChild(li);
        // We can assign user-supplied strings to an element's textContent because it
        // is not interpreted as markup. If you're assigning in any other way, you 
        // should be aware of possible script injection concerns.
        li.textContent = `${user} says ${message}`;
    });
    
    connection.start().then(function () {
        document.getElementById("sendButton").disabled = false;
    }).catch(function (err) {
        return console.error(err.toString());
    });
    
    document.getElementById("sendButton").addEventListener("click", function (event) {
        var user = document.getElementById("userInput").value;
        var message = document.getElementById("messageInput").value;
        connection.invoke("SendMessage", user, message).catch(function (err) {
            return console.error(err.toString());
        });
        event.preventDefault();
    });
    

    还可以提到Socket.IO,我个人以前从未使用过。

    愉快的编码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多