如何跟踪SignalR连接状态?

时间:2014-03-27 18:12:46

标签: signalr

David Fowler亲自指出了这个GITHub sample代码来跟踪SignalR用户和状态。我已经实现了所有这些并且它工作得很好,除了我无法弄清楚Hub连接状态变化的显示。我有这个似乎不起作用。有谁知道为什么?

!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style>
        #state {
            width: 20px;
            height: 50px;
        }
    </style>
</head>
<body>
    <h3 id="msg"></h3>
    <div id="state"></div>

    <script src="../Scripts/jquery-1.10.2.min.js"></script>
    <script src="../Scripts/jquery.signalR-2.0.2.min.js"></script>
    <script src="signalr/hubs"></script>
    <script>

        $(function () {
            var userTracking = $.connection.alphaHub;

            // Need at least one callback for events to be raised on the hub
            userTracking.client.void = function () { };
            $.connection.logging = true;

            $.connection.hub.stateChanged(function (change) {
                if (change.newState === $.signalR.connectionState.connected) {
                    $('#state').css('background-color', 'green');
                } else if (change.newState === $.signalR.connectionState.reconnecting) {
                    $('#state').css('background-color', 'yellow');
                } else if (change.newState === $.signalR.connectionState.disconnected) {
                    $('#state').css('background-color', 'red');
                }

            });

            $.connection.hub.disconnected(function () {
                setTimeout(function () {
                    $.connection.hub.start();
                }, 1000);
            });
        });
    </script>
</body>
</html>

我的中心部分显示在这里:

public class AlphaHub : Hub
    {
public override async Task OnConnected()
        {
            try
            {
                var name = Context.User.Identity.Name;

                using (savitasEntities2 entities = new savitasEntities2())
                {
                    var user = entities.SUsers
                        .Include(u => u.SConnections)
                        .SingleOrDefault(u => u.UserName == name);

                    if (user == null)
                    {
                        user = new SUser
                        {
                            UserName = name,
                            SConnections = new List<SConnection>()
                        };
                        entities.SUsers.Add(user);
                    }

                    user.SConnections.Add(new SConnection
                    {
                        ConnectionID = Context.ConnectionId,
                        UserAgent = Context.Request.Headers["User-Agent"],
                        LastActivity = DateTimeOffset.UtcNow
                    });
                    // entities.SaveChanges();
                    await entities.SaveChangesAsync();
                }

            }

 public override async Task OnDisconnected()
        {
            try
            { 
                using (savitasEntities2 db = new savitasEntities2())
                {
                    var connection = await db.SConnections.FindAsync(Context.ConnectionId);
                    db.SConnections.Remove(connection);
                    await db.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                c.LogError(ex.Message, "AlphaHub.cs" + " - " + this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name);   
            }
        }

1 个答案:

答案 0 :(得分:0)

看起来无法找到您的集线器。

变化:

<script src="signalr/hubs"></script>

为:

<script src="~/signalr/hubs"></script>