SignalR + WebAPI + AngularJS + HubContext,客户端仍然没有收到消息

时间:2015-02-03 10:48:46

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

在过去的几天里,我一直在尝试将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 Controller:

$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());
});    

这是尝试从服务器通知客户端的Controller

    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上点击“sendmessage”按钮时,它会向服务器发送一条消息,然后由客户端再次接收,这100%正常工作,

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

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

请有人帮助我!

2 个答案:

答案 0 :(得分:0)

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

检查你的jQuery.signalR版本。

答案 1 :(得分:0)

如果您使用依赖注入,ASP.NET的示例是错误的,您必须在Global.asax文件中设置GlobalHost.DependendcyResolver。不在创业班。