【发布时间】:2016-10-24 07:23:48
【问题描述】:
在建立集线器连接的网站中,我调用服务器端函数将用户信息记录到数据库中。数据库中的表用于跟踪用户连接/断开状态。我注意到用户并不总是显示为已连接。因此我认为是因为它没有写入表格。我查了一下,没有行...
我添加了ErrorHandlingPipeline 来捕获错误。我得到的只是Object reference not set to an instance of an object。似乎产生错误的函数是我在前面提到的连接启动时调用的第一个函数。这里是:
public async Task Join()
{
var user = GetUser(Context.User.Identity.Name);
var groupName = user.Group;
await Groups.Add(Context.ConnectionId, groupName);
Clients.Group(groupName).addUser(Context.User.Identity.Name);
// Update group in the db
using (var db = new UserEntities())
{
var connection = db.OnlineUsers.Find(Context.ConnectionId);
connection.Group = groupName;
db.SaveChanges();
}
}
我还在public override Task OnConnected() 中放置了一个断点,但似乎首先调用了Join()?因为它并没有止步于此。
我认为,这就是问题所在,但为什么不会先调用 OnConnected 呢?
这里是枢纽:
$.connection.hub.start().done(function () {
// connected
theHub.server.join();
});
更新: 看起来问题可能出在 IE11 上,它适用于 FireFox 和 Chrome。这是来自 IE 的控制台日志:
SignalR: webSockets transport starting.
SignalR: Connecting to websocket endpoint 'ws://localhost:1234/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=1234%3connectionData=%a%b&tid=1'.
SignalR: Websocket opened.
SignalR: webSockets transport connected. Initiating start request.
SignalR: The start request succeeded. Transitioning to the connected state.
SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332, keep alive timeout of 20000 and disconnecting timeout of 30000
SignalR: Invoking MyHub.Join
SignalR: Triggering client hub event 'addUser' on hub 'MyHub'.
SignalR: MyHub.Join failed to execute. Error: There was an error invoking Hub method 'MyHub.Join'.
SignalR: Triggering client hub event 'addUser' on hub 'MyHub'.
[SignalR: Triggering client hub event 'addUser' on hub 'MyHub'.
SignalR: Invoking MyHub.GetaddUser
【问题讨论】:
-
它尝试连接的数据库实例是什么?
标签: c# asp.net-mvc asp.net-mvc-5 signalr