2016-09-13 7 views
0

はここにバックエンドでの私のsignalrピースであるソリューションangularjs + asp.netウェブAPIで作業していない 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); 
     }; 

    }); 

}]); 

と私が使用し

<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> 

LIBSクロムのウェブツールは、すべてが私にはうまく見えた。私はJSのデバッグとjquery.signalR-2.2.1.min.jsにそれは私を示した:

SignalR: Connection must be started before data can be sent. Call .start() before .send()

を、私は修正する方法がわからない、それ

答えて

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コンテキスト内に存在するべきではありません。

+0

答えていただきありがとうございますが、まだこのエラーがあります:angular.js:11358エラー:SignalR:データを送信する前に接続を開始する必要があります。 Object.send(jquery.signalR-2.2.1.min.js:9)の前に.start()を呼び出します。 at invoke(jquery.signalR-2.2.1.min.js:9) at $ angle.addMessage(VM45 chatController.js:32) at angular.js:12133 at f(angular.js:22518) 時h。$ eval(angular。 js:14123) (h。$ apply(angular.js:14221) 、HTMLButtonElement)。 (angular.js:22523) at HTMLButtonElement.c(angular.js:3013) – mrnvdvmv

+0

私はそれを修正しました。どのくらい知っているのですか? – mrnvdvmv

+0

hmmm角度がキックを開始したと思います。また、パスは通常〜/ signalr/hubsです。 – Ted