2017-03-07 12 views
2

コントローラメソッドで、キックする必要があるuserNameを受け取ります。ハブクラスの外部からHubメソッドが機能しない

public ActionResult Kick(string userName) 
    { 
     var hub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();    
     var user = userService.GetUserByName(userName); 
     hub.Clients.Client(user.ConnectionIdInHub).kickUser(); 
     return Json(new { success = true}); 
    } 

kickUser() - これはJSメソッドです。しかし、コントローラメソッドKick()からkickUser()が実行されているときは、クライアント側で何も起こりません。

chatHub.client.kickUser = function() { 
     window.location.replace(window.kickUserActionUrl); 
    } 

この問題を解決するにはどうすればよいですか?

は、私はこれを実行しようとしました:

public static void OnKicked(string connectionId) 
     { 
      var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); 
      hubContext.Clients.Client(connectionId).closeConnection(); 
     } 

ここで解決する別の方法です私はこのChatHub.OnKicked(user.ConnectionIdInHub); のようなハブメソッドを呼び出しますが、それはまだ

を動作しません:

は、

私はクライアント側でsetInterval()メソッドを呼び出しています。これは10秒ごとにサーバー要求に送信されます。サーバー上でこのリクエストを受け取ることによってJSonメソッドがチェックされています。現在のユーザーはIsKicked=trueです。この場合、JSonはnew {success=true}を返信し、そこでユーザーはキックページに再接続されます。

+1

クライアント側でどのようなSignalRスクリプトを使用しましたか?生成されたプロキシと必要なサポートスクリプトが含まれていることを確認したいだけです。 –

+0

@RobReagan これはどういう意味ですか? ' –

+0

これはまさに正しいものです。ありがとう。 –

答えて

1

これは、ハブクラスの外部からハブメソッドを実行するのに役立ちました。

var myHub = $.coonection.hubName; 
myHub.server.myMethod; //name of the method should begin with a small letter 
関連する問題