signalr无法使用解决方案angularjs + asp.net web api

时间:2016-09-13 13:36:14

标签: signalr

这是我在后端的信号器

public class ChatHub : Hub
    {
        public void AddMessage(string userName, string message)
        {

            Clients.All.receivedNewMessage(userName, message);
        }
    }

和前端

 app.controller('chatController', ['$scope', function ($scope) {

        var _message = function(id, message, username, date)
        {
           // this.id = id;
            this.message = message;
            this.username = username;
          //  this.date = date;

        }

    $scope.username = "test";
    $scope.message = "";

    $scope.messages = [];

        //auto proxy start
    $.connection.hub.url = "http://localhost:*****/signalr/";
    var myChatHub = $.connection.chatHub;
    $.connection.hub.logging = true;



    myChatHub.client.receivedNewMessage = function (username, message) {
        var newMessage = new _message( name, message);
            $scope.messages.push(_message);
            $scope.$apply();

        };


    $.connection.hub.start().done(function () {

        $scope.addMessage = function () {
            myChatHub.server.addMessage($scope.username, $scope.message);
        };

    });

}]);

和libs

   <script src="scripts/jquery-3.1.0.js"></script>
    <script src="scripts/jquery.signalR-2.2.1.min.js"></script>
    <script src="http://localhost:*****/signalr/hubs"></script>

我在chrome上使用了网络工具,一切看起来都不错。我调试了js,并在jquery.signalR-2.2.1.min.js上显示了它:

  

SignalR:必须先启动连接才能发送数据。呼叫   .start()之前.send()

我不知道如何解决它

1 个答案:

答案 0 :(得分:0)

变化:

$.connection.hub.start().done(function () {
  $scope.addMessage = function () {
    myChatHub.server.addMessage($scope.username, $scope.message);
  };
});

要:

$scope.addMessage = function () {
  myChatHub.server.addMessage($scope.username, $scope.message);
};

$.connection.hub.start().done(function () {
 $scope.addMessage($scope.username, $scope.message);
});

函数声明不应存在于start().done上下文中。