2012-12-10 34 views
6

Tôi đang gặp sự cố với Ghi đè OnConnected và OnDisconnected trong Hub không kích hoạt.SignalR OnConnected và OnDisconnected không kích hoạt

Đối với mục đích nhân rộng, tôi đã có một Hub rất đơn giản:

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()); 
    } 
} 

Và một trang 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> 

Tôi đang sử dụng jQuery 1.6.4 và signalR 1.0.0-alpha2. Các phương thức kết nối và ngắt kết nối phía máy khách không được thực thi. Và nếu tôi đặt một điểm ngắt trong OnConnected hoặc OnDisconnected, các điểm ngắt không trúng.

Kết nối đang được thực hiện khi TestMethod của tôi gọi ok và tôi nhận được connectionId trở lại từ cuộc gọi đàm phán của signalR.

Tôi chắc chắn rằng tôi thiếu thứ gì đó đơn giản.

Xin cảm ơn trước.

Trả lời

11

xử lý Khách hàng của bạn có lẽ nên trông như thế này:

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

Cảm ơn bạn đã trả lời, trong trường hợp này, cách tôi thực hiện nó là chính xác vì nó không phải là trình xử lý như vậy, mà là định nghĩa của một phương thức mà máy chủ có thể gọi. Cảm ơn anyway mặc dù. :) – DavidGouge

+2

Tôi khá chắc chắn tôi đã đúng! https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client –

+0

Nó không làm việc cho tôi. https://stackoverflow.com/questions/47157099/signalr2-onconnected-not-working-as-per-documentation – Developer

2

đặn nó ra. Tôi đã kêu gọi các phương pháp trên đối tượng máy chủ chứ không phải là khách hàng:

$.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>"); 
    }; 

nên

$.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>"); 
    }; 

Vì vậy, nó trông như thế nào nếu signalR đã không nhận được bất cứ điều gì định nghĩa cho các nhiệm vụ trong OnDisconnected hoặc OnConnected , sau đó họ không bị sa thải. Điều đó có ý nghĩa.

+4

Bạn nên đánh dấu câu trả lời của @ Duncan là tốt, vì anh ấy đã đúng! – billy

+1

Câu trả lời đúng là @ Duncan's, kể từ khi anh ấy đăng nó như nửa giờ trước đó! –

+3

Có, cảm ơn bạn @Matei_Radu cho chiming trong một thời trang nhanh chóng như vậy trên một câu hỏi 3 tuổi. Trang web này sẽ ở đâu mà không có bạn !? – DavidGouge

5

Nó cũng chỉ ra rằng trên một kịch bản bạn cần phải xác định ít nhất một khách hàng gọi lại cho các sự kiện được nêu ra trên trung tâm. Hãy cẩn thận với điều này khi được mong đợi OnConnected và OnDisconnected để được gọi.

+0

Ngoài ra, hãy xem https://coderwall.com/p/5oykeq/be-careful-about-ondisconnected-when-using-signalr này –

Các vấn đề liên quan