1

IDisconnectインターフェースを実装するハブを作成しました。なぜDisconnectが実行されないのかわかりません。Visual Studioデバッグでは機能しない可能性があることを読みましたが、本番サーバーでもテストしました。

これが私のコードです:

[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()はテストのみを目的としており、現在の日時をデータベースレコードに保存します。firebugを使用してコンソールでhub.test()を実行すると、すべて問題ありませんが、ブラウザーを閉じると、現在の時刻がデータベースに保存されないため、Disconnectが実行されません。

ここにMyHub.jsのコードを追加しました

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

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

2 に答える 2

1

SignalR が使用している転送方法は何ですか? ブラウザごとに異なる場合があります。

于 2012-08-03T21:46:48.070 に答える
0

これが機能するはずであるというあなたの期待と同様に、あなたの実装は問題ありません。

どのくらい待っていますか?ブラウザーを閉じているだけの場合は、ネットワーク レベルでの切断が IIS によって "認識" され、SignalR に伝達されるまでに時間がかかる場合があります。

于 2012-08-03T21:25:52.360 に答える