SignalR冻结所有后续的http请求

时间:2014-06-18 03:50:42

标签: c# asp.net .net iis signalr

我正在尝试在我的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,我什么也得不到,并且进入无限阻塞状态。

enter image description here

以下是应用程序池的屏幕截图。我正在以集成模式运行。

enter image description here

这是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();
        }
    }

2 个答案:

答案 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连接使用。

相关问题