首页 > 解决方案 > 无法在 ASP.NET MVC 应用程序中使用 Signal R 调用客户端方法

问题描述

出于某种原因,我无法从我的 ASP.NET MVC 应用程序中简单地使用 Signal-R 调用客户端方法,并且想知道是否有人可以提供帮助。

这是我到目前为止所拥有的。我有一个名为“NotifyUser”的集线器,其中包含以下内容:

public class NotifyUser : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.addNewMessageToPage(name, message);
    }
}

在 Document.Ready() 的 javascript 文件中的客户端上,我有:

$(function () 
{
   var notifyUser = $.connection.notifyUser;

   notifyUser.client.addNewMessageToPage= function (name, message) 
   {
        var x = 5;
   };

   $.connection.hub.start();
})

我正在尝试从服务器上的控制器调用客户端方法,如下所示:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotifyUser>();
hubContext.Clients.All.Send("George", "Hi");    

当我在客户端的“addNewMessageToPage”函数中设置断点时,它永远不会被命中。有人可以帮忙吗?谢谢。

皮特

标签: asp.net-mvcsignalr

解决方案


当您想从控制器调用集线器方法时,它必须声明为静态方法,如下所示:

public class NotifyUser : Hub
{
    public static void Send(string name, string message)
    {
        Clients.All.addNewMessageToPage(name, message);
    }
}

此更改解决了您的问题,但请注意,如果您想从客户端 java 脚本调用集线器方法,它必须是非静态的,因此您必须声明两种方法:一种用于控制器调用的静态方法,另一种用于 java 脚本调用的非静态方法


推荐阅读