0
我被指向David Fowler自己的GITHub sample代碼來跟蹤SignalR用戶和狀態。我已經實現了它的全部功能,除非我無法弄清楚集線器連接狀態變化的顯示,否則它工作的很好。我有這似乎沒有工作。有誰知道爲什麼?如何跟蹤SignalR連接狀態?
!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);
}
}
你有什麼是不工作的詳細信息? JavaScript控制檯中的任何錯誤?在集線器上是否觸發了OnConnected()和OnDisconnected()方法?是否正在執行hub.stateChanged回調? –
感謝您的回覆。我得到SCRIPT5007:無法在控制檯中獲取未定義或空引用的屬性'client',因此它不能連接到Hub $ .connection.alphaHub; – user2471435
我需要像[HubName(「userTracking」)]一樣添加[HubName(「alphaHub」)]嗎?我認爲JavaScript中的默認是使用camelCase? – user2471435