2016-11-30 2 views
0

私はsignalr javascriptクライアントを使用してsugnalrハブに接続しています。Signalr Uncaught TypeError:currentHub.server.OnConnected is not function(...)

ハブOnConnectedメソッドこの

public override Task OnConnected() 
     { 
      try 
      { 
       var cType = Context.QueryString["type"]; 
       var connectionId = Context.ConnectionId; 
       var connectedUserList = (from d in Users 
             where d.ClientType == cType 
                  select d).ToList(); 
       if (connectedUserList.Count > 0) 
       { 
        var conUser = connectedUserList.First<ConnectedUsers>(); 
        conUser.ConnectionIds.Add(connectionId); 
       } 
       else 
       { 
        var newUser = new ConnectedUsers 
        { 
         ConnectionIds = new HashSet<string> {connectionId} 
         , 
         ClientType = cType 
        }; 
        Users.Add(newUser); 
       } 
      } 
      catch (Exception ex) 
      { 

      } 
      return base.OnConnected(); 
     } 

他のハブ方式

public void PushMessage() 
     { 
      try 
      { 
       var context = GlobalHost.ConnectionManager.GetHubContext<MainHub>(); 
        var user = (from d in Users 
             where d.ClientType == "WIN" 
             select d).Single(); 
       context.Clients.Clients(user.ConnectionIds.ToArray()).sendAlert("EXCEL"); 
      } 
      catch (Exception e) 
      { 
       //throw; 
      } 
     } 

とJavaScriptクライアント

<html> 
<body> 
    @RenderBody() 

    @Scripts.Render("~/bundles/jquery") 
    <script src="~/Scripts/jquery.signalR-2.2.1.js"></script> 
    <script src="@Url.Content("http://localhost:1010/signalr/hubs")"></script> 
    @RenderSection("scripts", required: false) 
</body> 
</html> 


<script type="text/javascript"> 

    var currentHub = []; 
    var connectionDetails = {}; 
    var SignalRHandler = { 
     _settings: { 
      connectionDetails: { 
       id: "1", 
       userName: "" 
      }, 
      hub: $(), 
      callBack: $(), 
      url: "" 
     }, 

     initilaize: function(options) { 
      this._settings = $.extend(true, this._settings, options); 
      if (!$.connection) 
       alert("$.connection undefined"); 
      else 
       this._bindEvents(); 
     }, 

     _bindEvents: function() { 
      // Start Hub 
      $.connection.hub.url = this._settings.url; 
      $.connection.hub.qs = { 'type': 'WEB' } 
      currentHub = $.connection[this._settings.hub], connectionDetails = this._settings.connectionDetails; 

      if (currentHub != undefined) { 

       currentHub.client.sendAlert = this._settings.callBack; 

       $.connection.hub.start().done(function() { 
        currentHub.server.OnConnected(); 

       }); 
       $.connection.hub.disconnected(function() { 
        setTimeout(function() { 
         $.connection.hub.start().done(function() { 
          currentHub.server.OnConnected(); 
         }); 
        }, 2000); // Restart connection after 2 seconds. 
       }); 
      } 

     }, 
     pushChatMessage: function() { 
      currentHub.server.pushMessage(); 
     }, 
     showMsg:function(msg) { 
      alert(msg); 
     } 
    }; 
    jQuery(document).ready(function($) { 

     SignalRHandler.initilaize({ 
      callBack: SignalRHandler.showMsg, 
      hub: "mainHub", 
      url: "http://localhost:1010/signalr/" 

     }); 

    }); 
</script> 

の下にこのコードは完璧に働いているとに接続するように、コードを接続していますハブからのメッセージを連続的に受信する。 しかし、私がデバッガコンソールをチェックするとき、それは言う。

Uncaught TypeError: currentHub.server.OnConnected is not a function(…)

このエラーを取り除くにはどうすればよいですか?

+0

手動OnConnectedを呼び出すことはありません。これは、クライアントがサーバーに接続するときに呼び出されます。 – Pawel

答えて

2

SignalRクライアント側からサーバーメソッドを呼び出すときは、ハブ内のメソッドにHubMethodName属性を使用して別の名前を指定していない限り、メソッド名はcamel-caseでなければなりません。

は、だからあなたの場合に呼び出します OnConnected方法は次のようになります。 currentHub.server.onConnected();

参考:https://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#callserver

+0

OnConnectedをonConnectedに変更しようとしましたが、問題はまだ存在します。 そして、OnConnectとしてHubのOnConnectedを変更すると、エラーが表示されなくなります。しかし、.NetクライアントはonConnectメソッドを使ってハブに接続できません – tarzanbappa

関連する問題