2012-08-03 17 views
1

我寫了一個實現IDisconnect接口的集線器。我不知道爲什麼Disconnect永遠不會執行。我讀過它可能不適用於visual studio debug,但是我甚至在生產服務器上測試過它。服務器端的SignalR IDisconnect不起作用

這裏是我的代碼:

[HubName("myHub")] 
public class MyHub: Hub, IDisconnect, IConnected 
{ 
    public Task Disconnect() 
    { 
     Log.SaveCurrentTime(); 
     return Clients.leave(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Connect() 
    { 
     return Clients.joined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public Task Reconnect(IEnumerable<string> groups) 
    { 
     return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public void Test() 
    { 
     Log.SaveCurrentTime(); 
    } 
} 

Log.SaveCurrentTime()僅用於測試目的,並保存當前日期時間做數據庫記錄。如果我用戶螢火蟲並在控制檯執行hub.test(),一切都很好,但是當我關閉瀏覽器當前時間不保存到數據庫,所以斷開連接不beeing執行。

在這裏,我添加的MyHub.js

var hub; 
$(function() { 
hub = $.connection.myHub; 

$.connection.hub.start().done(function() { 
    alert('connected'); 
}) 
}); 
+0

您是否使用內置的VS服務器?如果是這樣,請改用IISExpress。 – davidfowl 2012-08-03 22:02:50

+0

我試圖在生產服務器上使用IISExpress和普通的IIS。 – mrrobot 2012-08-03 23:21:06

+0

它絕對有效。你使用的是什麼瀏覽器?你使用的是什麼版本的SignalR? – davidfowl 2012-08-03 23:41:54

回答

0

你的實現是罰款,是你的期望,這應該工作的代碼。

你還等多久?如果您只是關閉瀏覽器,則可能需要一段時間才能讓網絡級別的斷開連接被IIS「注意到」並傳播到SignalR。

+0

我等了一個小時,什麼都沒有發生。通常需要多長時間,可以讓IIS「注意」我斷開連接? – mrrobot 2012-08-03 23:20:18

+0

不那麼久。 :) – 2012-08-04 04:02:43

1

SignalR使用什麼傳輸方法?每個瀏覽器可能有所不同。

+0

你是什麼意思「SignalR使用什麼傳輸方法」?我如何檢查我使用的運輸方式? – mrrobot 2012-08-03 23:22:17

+0

$ .connection.hub.transport – davidfowl 2012-08-03 23:51:48

+0

我輸入$ .connection.hub.transport到chrome控制檯,這就是它顯示的內容:'$ .connection.hub.transport Object abort:function(connection,async){ name : 「serverSentEvents」 重新連接:功能(連接){ 發送:功能(連接,數據){ 啓動:功能(連接,的onSuccess,onFailed){ 站:功能(連接){ 超時:3000 __proto__:對象' – mrrobot 2012-08-03 23:56:16

相關問題