Controller的SignalR广播无法正常工作

时间:2013-04-01 19:25:13

标签: signalr signalr-hub

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

  1. 我的客户似乎没有收到消息。
  2. 我的集线器上下文似乎没有定义'addMessage':
  3. 我的中心:

    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 {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException}

    1. 如果我从上面的客户端代码中运行以下代码,我会收到一条消息。

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

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

1 个答案:

答案 0 :(得分:4)

我将在您的初始应用程序中查看错误,以了解为什么您的第二个要点使其全部工作。

在您的javascript客户端中,您必须开始连接:

$.connection.hub.start();

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

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

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

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