首页 文章

Controller的SignalR广播无法正常工作

提问于
浏览
0

我正在使用最新版本的SignalR(1.0.1) . 我正试图从我的控制器广播到集线器,并有一些问题:

  • 我的客户端似乎没有收到消息 .

  • 它没有't seem that my hub context even has an ' addMessage'定义:

我的中心:

public class SignalRPriceHub : Hub
{
    public void sndMessage(string msg)
    {
        Clients.All.addMessage(msg + "****");
    }
}

Javascript客户端:

<script src="@Url.Content("~/Scripts/jquery.signalR-1.0.1.min.js")"></script>
<script src="~/signalr/hubs"></script>
.....
var myHub = $.connection.signalRPriceHub;
myHub.client.addMessage = function (message) {
    alert(message);
};

控制器:

var context = GlobalHost.ConnectionManager.GetHubContext<SignalRPriceHub>();
context.Clients.All.addMessage("TestOutsideMessage!!!");

我注意到的一些事情:1 . 我的集线器上下文似乎没有'addMessage'{“'Microsoft.AspNet.SignalR.Hubs.ClientProxy'不包含'addMessage'的定义”} System.Exception

  • 如果我从与上面客户端代码相同的文件中运行以下代码,我会收到一条消息 .

var myHub = $ .connection.signalRPriceHub; $ .connection.hub.start(function(){myHub.server.sndMessage(“Hello World!”);});

任何人都可以对可能发生的事情有所了解吗?谢谢大家!

1 回答

  • 4

    我将回顾你最初的应用程序中的错误,这些错误阐明了为什么你的第二个要点使它全部工作 .

    在您的javascript客户端中,您必须启动连接:

    $.connection.hub.start();
    

    然后,您必须通过调用sndMessage命令在集线器上请求消息:

    $.connection.hub.start().done(function() {
        myHub.server.sndMessage("Hello world");
    });
    

    您在集线器上下文中看不到addMessage函数的原因是集线器上下文.Clients.All是动态的 .

    最后一点,为了使样本工作,您还需要确保在Application_Start中有RouteTable.Routes.MapHubs(); . 我假设你已经有了这个,因为一旦你添加连接开始一切正常 .

相关问题