c# - SignalR 不调用 jQuery 函数

标签 c# javascript jquery asp.net signalr

我的页面中有这段代码,但是当我在数据库中进行更改时它没有运行,这可能是什么问题。 这开始很好,当我加载页面时,它会执行该函数两次,但如果我向数据库发送消息,它不会执行。

$(function () {

var chat = $.connection.chatHub;
chat.client.allTalks = function () {
    refresh();
};
$.connection.hub.start();
    refresh();

});

服务器端(集线器):

    [HubName("chatHub")]
    public class ChatHub : Hub
    {
        public static void AllTalks()
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            context.Clients.All.allTalks();
        }
    }

处理程序

...

using (SqlCommand command = new 
SqlCommand(@"SELECT * FROM [dbo].[chat_talks]", connection)) {

//内容

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

...

        public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            ChatHub.AllTalks();
        }

GLOBAL.ASAX

        protected void Application_Start(object sender, EventArgs e)
        {
            SqlDependency.Start(ConfigurationManager.ConnectionStrings["ProjectSellerConnection"].ConnectionString);
        }

enter image description here

最佳答案

首先,在服务器端代码中包含第一行代码是多余的。无需在集线器内调用 hubContext。你可以这样做:

public static void AllTalks()
{
    Clients.All.allTalks();
}

我会建议,也许是愚蠢的,不要使用 SQL Dependency。相反,我建议使用以下调用 SignalR 的技术(具体来说,它将调用客户端函数):

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
hubContext.Clients.All.allTalks();

例如,您可以在 MVC 和 WebAPI Controller 中的操作中调用它,这意味着如果您在这些操作中完成了任何数据库更新,您随后可以使用此方法调用客户端。我知道它不像 SQL 依赖项那么花哨,也许不是您要寻找的答案,但它会解决您的问题 - 因为看起来问题似乎与 SignalR 检测数据库更改有关。

换句话说,这种方法行得通,但它可能不是您所希望的那样。

关于c# - SignalR 不调用 jQuery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408314/

相关文章:

c# - 在 windows 7 启动时启动程序(自动启动)

c# - 已具有此连接的打开的 DataReader

javascript - 循环输入字段时设置标志

jquery - .slideUp 和 .slideDown 突然停止正常工作

c# - 为什么 String.IndexofAny() 在 Framework 4.6 中与 .NET50 中的工作方式不同

c# - 给定编码中的 xml 无效字符

php - 不同日期有不同数据

javascript - 回调函数给出错误 - angularjs

jQuery Sortable 用于两列重新排序?

javascript - 根据第一个下拉列表中的选择动态填充 3 个下拉列表