【问题标题】:SignalR don't call jQuery functionSignalR 不调用 jQuery 函数
【发布时间】:2014-04-19 22:33:29
【问题描述】:

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

$(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);
        }

【问题讨论】:

  • 我认为你需要移动 $.connection.hub.start();在你运行 chat.client.allTalks 之前,你需要 var chat 是一个全局变量
  • 我在每一步都添加了console.log,并在页面加载时启动,但是当我更新数据库时它不会调用我的jQuery函数
  • 您是否调试/跟踪了您的服务器端代码以验证 Clients.allTasks 是否实际被调用。您可以将您的服务器端代码添加到您的问题中吗?我还将您的客户端日志添加到您的问题中。即使您在客户端日志中没有发现任何问题,它也可能对尝试回答您的问题的其他人有所帮助。
  • 能否添加dependency_OnChange的完整代码?您在哪里调用集线器客户端方法(我假设是 Clients.All.allTalks())?

标签: c# javascript jquery asp.net signalr


【解决方案1】:

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

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

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

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

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

换句话说,这种方法是可行的,但它可能不是您所希望的准确方法。

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 2018-10-20
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多