2012-12-10 2 views
6

내 허브에서 OnConnected 및 OnDisconnected 무시가 문제가 발생했습니다.SignalR OnConnected 및 OnDisconnected not firing

public class OnlineHub : Hub 
{ 
    public void TestMethod() 
    { 
     var a = 1; 
    } 

    public override System.Threading.Tasks.Task OnConnected() 
    { 
     return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public override System.Threading.Tasks.Task OnDisconnected() 
    { 
     return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 
} 

과 aspx 페이지 :

복제 목적을 위해, 나는 아주 간단한 허브있어

<script type="text/javascript"> 
    $(function() { 
     $("#btn").click(function() { 
      $.connection.onlineHub.server.testMethod(); 
     }); 

     $.connection.onlineHub.server.connected = function (id, date) { 
      $("#results").append("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.server.disconnected = function (id, date) { 
      $("#results").append(("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.connection.start(); 
    }); 

</script> 

내가 jQuery를 1.6.4 사용하고 있습니다 및 signalR 1.0.0-alpha2. 클라이언트 쪽 연결 및 연결 해제 된 메서드가 실행되고 있지 않습니다. OnConnected 또는 OnDisconnected에 중단 점을 넣으면 중단 점에 도달하지 않습니다.

내 TestMethod가 ok를 호출하고 signalR의 협상 호출에서 connectionId가 다시 연결되어 연결이 설정됩니다.

나는 뭔가 간단하다고 생각합니다. 사전에

감사합니다.

답변

11

클라이언트 핸들러는 아마 다음과 같아야합니다

$.connection.onlineHub.client.connected = function(){...} 
+0

답장을 보내 주셔서 감사합니다.이 경우 핸들러처럼 처리하지 않지만 서버가 호출 할 수있는 메서드의 정의는 정확합니다. 어쨌든 고마워. :) – DavidGouge

+2

나는 내가 옳다는 것을 꽤 확신한다! https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client –

+0

나를 위해 작동하지 않습니다. https://stackoverflow.com/questions/47157099/signalr2-onconnected-not-working-as-per-documentation – Developer

2

는 그것을 알아 냈다. 그래서 signalR 가지고 있지 않은 경우 아무 것도이 OnDisconnected 또는 OnConnected 내 작업에 대해 정의처럼 보이는

$.connection.onlineHub.server.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.server.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

$.connection.onlineHub.client.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.client.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

을해야한다 : 나는 오히려 클라이언트보다 서버 객체의 메소드를 호출했다 , 그들은 해고되지 않습니다. 어떤 의미가 있습니다.

+4

@ Duncan의 답은 그가 옳았 기 때문에 좋은 것으로 표시해야합니다! – billy

+1

그가 30 분 일찍 게시 한 이후로 올바른 대답은 @ Duncan 's입니다. –

+3

예, 3 년 이상 된 질문에 대한 그런 유행에 빠지기 위해 @Matei_Radu에게 감사드립니다. 이 사이트는 당신이 없으면 어디에 있습니까? – DavidGouge

5

또한 스크립트에서 허브에서 발생시킬 이벤트에 대해 적어도 하나의 클라이언트 콜백을 정의해야한다는 것이 밝혀졌습니다. OnConnected 및 OnDisconnected가 호출 될 때이 작업에주의하십시오.

+0

또한보십시오 이것에 https://coderwall.com/p/5oykeq/be-careful-about-ondisconnected-when-using-signalr –