【发布时间】:2014-06-19 00:15:45
【问题描述】:
我的 SignalR 出现了一个奇怪的行为,我有一个这样定义的集线器:
public class NotificationHub : Hub
{
//Empty
}
在我的 js 中,我有以下内容:
function blabla {
// bla bla
$.connection.NotificationHub.client.AppendNewStory = function (story) {
// appends a new story, long jquery code
};
$.connection.hub.start().done(function () {
_ConnectionStarted = true; // there must be some built in way
});
}
我从我的 mvc 项目的一个类中调用 js
public SomeClass
{
private IHubContext _context;
public SomeClass()
{
_context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
}
public void Notify(SomeData ...)
{
_context.Clients.User(userId).AppendNewStory(data);
}
}
问题有两个症状:
- 服务器到客户端类间歇性失败(无法确定场景)。
- 我的网络服务器似乎变得非常缓慢,随后的 ajax 调用和常规的网络请求超时。
使用提琴手我发现了以下内容:
- SignalR/hubs 调用成功。
- SignalR 协商呼叫成功。
- 使用 WebSockets 传输连接失败,HTTP 504!
- 随后的连接调用尝试使用 foreverFrame 和长轮询,均以 200 成功。
- 发出一个轮询请求并且永不返回!之后,一切都变得缓慢或挂起。
如果我打开 2 个或更多选项卡,服务器会挂起,这可能有助于调试。一个标签似乎没问题。
我也在使用 IE 11 和 chrome,除了 chrome 尝试使用 serverSentEvents 而不是 foreverFrame 之外,同样的问题。
关于如何调试此问题的任何想法,看看为什么我得到 504?或者为什么服务器挂起?我有 Windows 8.1 Update 1、IIS 8、SignalR 2.0、.NET 4.5.1。
【问题讨论】:
标签: signalr