我对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);
}
}
问题有两个症状:
使用fiddler我发现了以下内容:
可能有助于调试的东西,如果我打开2个或更多标签,服务器就会挂起。单个标签似乎没问题。
我也使用IE 11和Chrome,除了chrome尝试serverSentEvents而不是foreverFrame之外,同样的问题。
关于如何调试此问题的任何想法,看看为什么我得到504?或服务器挂起的原因?我有Windows 8.1 Update 1,IIS 8,SignalR 2.0,.NET 4.5.1。
答案 0 :(得分:2)
您是否在Windows 8.1中安装了WebSockets?在添加/删除功能下执行此操作。在我这样做之前,我有类似的随机问题。我还必须在web.config中启用以下设置:
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
答案 1 :(得分:1)
您的服务器和浏览器之间是否有任何内容。某些代理在Web套接字和服务器发送事件时遇到问题。尝试选择transports in the javascript。我在Firefox上看到了与OpenIG类似的东西。 OpenIG不喜欢服务器发送事件而只是挂起。
答案 2 :(得分:0)
您要调查的一种可能性是,您是否遇到了允许IIS连接数量的限制。我不确定websocket连接是否包含在该限制中,但是正常连接 - 以及长轮询连接将消耗其中一个 - 在Windows 8的“基本”版本上通常限于“3”(并且是有限的)专业版和其他版本的10个)。我猜你的长轮询连接消耗了所有可用的连接,这就是导致其他所有连接超时的原因。
请点击此处了解更多详情:
http://www.jpelectron.com/sample/WWW%20and%20HTML/IIS-%20OS%20Version%20Limits.htm
我要升级到专业版(如果你已经在“专业版”,然后打折这个答案),或者安装Websockets,看看是否有帮助。
答案 3 :(得分:0)
对于所有回答过的人来说,你们都帮助调试了这个问题,不幸的是没有任何效果。
问题结果我需要在web.config中设置targetFramework属性:
<httpRuntime targetFramework="4.5.1">
之后一切顺利。