【问题标题】:SignalR + WebAPI + AngularJS + HubContext, Client's still don't receive messagesSignalR + WebAPI + AngularJS + HubContext,客户端仍然收不到消息
【发布时间】:2015-04-02 12:53:35
【问题描述】:

在过去的几天里,我一直在尝试将 SignalR 实现到我的 AngularJS/WebAPI 应用程序中。

我已经能够成功地从客户端发送/接收消息,但是当我纯粹从服务器推送消息时,没有一个客户端收到任何消息。

我看到很多人遇到同样的问题,答案似乎总是使用我一直在实施的 GlobalHost.ConnectionManager.GetHubContext ,没有错误,但是客户端仍然没有收到任何消息。

我认为这可能是因为 WebAPI 调用是异步的,因此发生在不同的线程上,但我不能确定。请有人看看并告诉我我做错了什么。

这是我的 Hub 类:

 public class ChatHub : Hub
{

    public void Send(string name, string message)
    {
        // Call the broadcastMessage 
        Clients.All.broadcastMessage(name, message);
    }

    public void RunMe()
    {
        System.Diagnostics.Debug.WriteLine("Client Started");
    }

    public static void Notify(string name, string message)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
        hubContext.Clients.All.broadcastMessage(name, message);
    }

}    

这是 Javascript 中的 Angular 控制器:

$scope.chat = $.connection.chatHub;

$scope.chat.client.broadcastMessage = function (name, message) {
    $scope.$apply(function () {
        var scope = angular.element($('#discussion')).scope();
        scope.chatMessage = message;

        alert(message);
    });
};

$.connection.hub.start()
.done(function ()
{
    console.log('Now connected, connection ID=' + $.connection.hub.id);
    $scope.chat.server.runMe();
})
.fail(function(){ console.log('Could not Connect!'); });

$('#sendmessage').click(function () {
    $scope.chat.server.send("SERVER", $('#inputMessage').val());
});    

这是试图从服务器通知客户端的控制器

    public class UserController : ApiController
{
    #region METHODS

    [ActionName("Create")]
    [HttpPost]
    public HttpResponseMessage Create(JObject parameters)
    {

        //DYNAMIC DATA
        dynamic data = parameters;

        //CHECK IF CALL FAILED
        if (data == null)
            return Request.CreateResponse(HttpStatusCode.InternalServerError, "Request is null");

        //PERFORM REQUEST 
        using (var svc = new UserService())
        {
            //SET Parameters
            String Username = data.Username;
            String Password = data.Password;

            //NOTIFY USERS
            ChatHub.Notify("SERVER", "SERVER MESSAGE");

            //CREATE Response
            var response = svc.Create(Username, Password);

            //RESPOND
            return Request.CreateResponse(HttpStatusCode.OK, response);
        }
    }

}

重申一下,当在我的 UI 上单击“发送消息”按钮时,它会向服务器发送一条消息,然后客户端再次接收该消息,这 100% 有效,

但是,当我从 Controller 调用静态 Notify 方法时,没有一个客户端收到任何消息。

调用函数不会返回任何错误。

请有人帮助我!

【问题讨论】:

  • 你为什么在控制器中使用 jquery?创建信号器服务包装器
  • @jack.the.ripper 感谢您的回复。你有一个使用信号器服务包装器的小例子吗?我对此很陌生,只是无法弄清楚。提前致谢。
  • 很确定他在谈论角度服务;这有帮助吗:stackoverflow.com/questions/20139127/…?
  • hmm.. 其实我刚才试过了,对我有用

标签: angularjs signalr asp.net-web-api


【解决方案1】:

如果你使用依赖注入,ASP.NET 的例子是错误的,你必须在 Global.asax 文件中设置你的 GlobalHost.DependendcyResolver。不在启动类中。

【讨论】:

    【解决方案2】:

        <!--Reference the SignalR library. -->
        <script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
    

    检查您的 jQuery.signalR 版本。

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 2016-08-25
      • 2020-10-15
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2014-12-16
      • 2018-01-20
      相关资源
      最近更新 更多