4

我有一个 SignalR 集线器,我成功地从 JQuery 调用它。

public class UpdateNotification : Hub
{
    public void SendUpdate(DateTime timeStamp, string user, string entity, string message)
    {
        Clients.All.UpdateClients(timeStamp.ToString("yyyy-MM-dd HH:mm:ss"), user, entity, message);       
    }
}

像这样从 JS 成功发送更新消息

var updateNotification = $.connection.updateNotification;
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] }).done(function () { });
updateNotification.server.sendUpdate(timeStamp, user, entity, message);

并像这样成功接收

updateNotification.client.UpdateClients = function (timeStamp, user, entity, message) {

我不知道如何从我的控制器中调用 sendUpdate。

4

2 回答 2

6

从您的控制器,在与集线器相同的应用程序中(而不是从其他地方,作为 .NET 客户端),您可以像这样进行集线器调用:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<UpdateNotification>();
hubContext.Clients.All.yourclientfunction(yourargs);

请参阅从https://github.com/SignalR/SignalR/wiki/Hubs脚下的集线器外部通过集线器进行广播

调用您的自定义方法有点不同。可能最好创建一个静态方法,然后您可以使用它来调用 hubContext,因为 OP 在这里:Server to client messages not going through with SignalR in ASP.NET MVC 4

于 2012-12-19T13:01:24.873 回答
3

这是 SignalR快速入门中的一个示例 您需要创建一个集线器代理

public class Program
{
    public static void Main(string[] args)
    {
        // Connect to the service
        var hubConnection = new HubConnection("http://localhost/mysite");

        // Create a proxy to the chat service
        var chat = hubConnection.CreateHubProxy("chat");

        // Print the message when it comes in
        chat.On("addMessage", message => Console.WriteLine(message));

        // Start the connection
        hubConnection.Start().Wait();

        string line = null;
        while((line = Console.ReadLine()) != null)
        {
            // Send a message to the server
            chat.Invoke("Send", line).Wait();
        }
    }
}
于 2012-12-19T10:50:24.647 回答