首页 > 解决方案 > .Net5 SignalR SqlNotification 通知通知客户端

问题描述

大家好,提前感谢您的帮助。我正在开发一个利用 SQL 通知的 .Net 5 SignalR 通知。该应用程序部分工作,在页面第一次加载时向客户端发送通知。经过一些进一步的调试。我确定每次数据库更新时都正确调用了 SendCallNotifications 方法,但是客户端没有正确更新。我不确定问题是否出在我的 javascript、线程问题(因为它被设置为任务),或者管道中是否存在某种类型的故障。这是我的集线器代码:

    public class CallNotificationHub : Hub
{
    //
    //  https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-5.0
    //  https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-5.0
    //
    private SqlDependency dependency;

    //  public Task OnConnected()
    public override async Task OnConnectedAsync()
    {
        //return base.OnConnectedAsync();
        await base.OnConnectedAsync();
    }


    //[HubMethodName("sendCallNotifications")]
    public async Task SendCallNotifications()
    {
        SendEmail sendEmail = new SendEmail("SendCallNotifications Reached", "New SignalR5 Notification", "");

        try
        {
            string connectionString = "connectionstring";
            SqlDependency.Start(connectionString);
            SqlConnection connection = new SqlConnection(connectionString);
            connection.Open();

            SqlCommand command = new SqlCommand();
            command.CommandText = "SELECT [ID], [TimeEntered], [CallFrom], [CallTo] FROM [dbo].[tbl_Log_InboundTwilioCalls]";
            command.Connection = connection;
            command.CommandType = CommandType.Text;

            dependency = new SqlDependency(command);
            dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

            DataTable dt = new DataTable();

            dependency.AddCommandDependency(command);

            var reader = command.ExecuteReader();

            //await Clients.All.SendAsync("ReceiveMessage", "user", "message");
        }
        catch (Exception ex)
        {
            SendEmail sendErrEmail = new SendEmail("SendCallNotifications Error", ex.ToString(), "");
        }
        
        await Clients.All.SendAsync("RecieveNotification", "Changed");
    }

    private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        SendEmail sendEmail = new SendEmail("Dependency Change", e.Type.ToString(), "");
        if (e.Type == SqlNotificationType.Change)
        {                
            CallNotificationHub nHub = new CallNotificationHub();
            nHub.SendCallNotifications();
        }
    }

这是我的javascript。

"use strict";

var connection = new signalR.HubConnectionBuilder().withUrl("/CallNotificationHub").build();

connection.on("RecieveNotification", (result) => {
var li = document.createElement("li");
li.textContent = result;
document.getElementById("messagesList").appendChild(li);

console.log(result);
alert("Changed");
});

connection.start().then(function () {
connection.invoke("SendCallNotifications").catch(err => console.error(err));
}).catch(function (err) {
return console.error(err.toString());
});

我在控制台中没有看到任何错误,所以我不确定下一步该往哪里看。任何帮助,将不胜感激。

我刚刚在控制台中遇到了一个新错误:

Error: An unexpected error occurred invoking 'SendCallNotifications' on the server.
invocationDescriptor.invocationId http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:2259
processIncomingData http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:2371
onreceive http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1923
onmessage http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4728
connect http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4725
connect http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4687
step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4649
verb http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4630
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4624
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4620
connect http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:4669
startTransport http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3842
createTransport http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3792
step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3411
verb http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3392
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3386
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3382
createTransport http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3745
startInternal http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3665
step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3411
verb http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3392
fulfilled http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3383
promise callback*step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3385
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3386
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3382
startInternal http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3596
start http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3480
step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3411
verb http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3392
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3386
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3382
start http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:3468
startInternal http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:2036
step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1883
verb http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1864
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1858
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1854
startInternal http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:2024
startWithStateTransitions http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:2006
step http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1883
verb http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1864
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1858
__awaiter http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1854
startWithStateTransitions http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1993
start http://192.168.0.3:61443/js/signalr/dist/browser/signalr.js:1989
<anonymous> http://192.168.0.3:61443/js/CallNotification2.js:14

CallNotification2.js:15:69

试图弄清楚这告诉我什么。以前没见过这个。

标签: signalr

解决方案


推荐阅读