我正在尝试在我的Web应用程序中使用SignalR,它在IIS 7.5上托管。
我使用的是Windows 7 X64(不含SP1),而.Net 4.5则使用SignalR v2.0.3.0。
如果我从IIS Express运行Web应用程序它工作正常,没有任何事情挂起,但只要我从IIS 7.5运行它就会挂起我的应用程序。我确认如果我禁用这段代码:
$.connection.hub.start().done(function () {
});
一切正常。以下是截图,表明在启动集线器后,所有请求都处于无限阻塞状态。甚至中心需要大约8-9秒才能响应,但即使在那之后,如果我请求一个简单的JPG,我什么也得不到,并且进入无限阻塞状态。
以下是应用程序池的屏幕截图。我正在以集成模式运行。
这是Hub类:
public class AppHub : Hub
{
public override Task OnConnected()
{
if (Context.User != null)
{
var email = Context.User.Identity.Name;
if (!string.IsNullOrEmpty(email))
{
UserRepository userRepository = new UserRepository();
userRepository.DoSomething(email, Context.ConnectionId);
}
}
return base.OnConnected();
}
public override Task OnDisconnected()
{
if (Context.User != null)
{
var email = Context.User.Identity.Name;
if (!string.IsNullOrEmpty(email))
{
UserRepository userRepository = new UserRepository();
userRepository.DoSomething1(email, Context.ConnectionId);
}
}
return base.OnDisconnected();
}
}
答案 0 :(得分:5)
文档说明您应该在您的开发计算机上使用IIS express,因为并发请求数量有限
当在IIS中托管SignalR时,支持以下版本。 请注意,如果使用客户端操作系统,例如 开发(Windows 8或Windows 7),完整版本的IIS或Cassini 不应该使用,因为同时限制为10 施加的联系,这将很快达到 连接是短暂的,经常重新建立,而不是 在不再使用时立即处置。 IIS Express应该是 用于客户端操作系统
与Windows 10相同。
取自SignalR文档: http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/supported-platforms
答案 1 :(得分:3)
这可能是因为Windows 7上的请求执行限制限制了在排队之前一次可以有多少并发请求。根据此table,IIS 7.5的请求执行限制为3或甚至1,具体取决于您的操作系统,这可能会被SignalR连接使用。