【问题标题】:SignalR freezing all subsequent http requestsSignalR 冻结所有后续的 http 请求
【发布时间】:2014-06-18 03:50:42
【问题描述】:

我正在尝试在我的 Web 应用程序中使用 SignalR,它托管在 IIS 7.5 上。

我使用的是 Windows 7 X64(不带 SP1)和带有 SignalR v2.0.3.0 的 .Net 4.5。

如果我从 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();
        }
    }

【问题讨论】:

  • 你在服务器端代码的任何地方都使用async/awaitTask.ResultTask.Wait()吗?
  • 嗯,是的,被覆盖的方法 OnConnected 和 OnDisconnected 返回 Task 但除此之外无处可去。
  • 如果您显示 OnConnected 和 OnDisconnected 的代码可能会有所帮助。
  • 当然。我在我的编辑中发布了它。
  • DoSomething 是否返回任何内容?是async吗?它内部是否使用了任何Task 对象?

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


【解决方案1】:

文档指出您应该在您的开发机器上使用 IIS express,因为并发请求的数量受到限制

当 SignalR 托管在 IIS 中时,支持以下版本。 请注意,如果使用客户端操作系统,例如 开发(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

【讨论】:

  • @Aron 可能是一个错字 - 已修复
【解决方案2】:

这可能是因为 Windows 7 上的请求执行限制,它限制了在排队之前一次可以有多少并发请求)。根据这里的table,IIS 7.5 的请求执行限制为 3 甚至 1,具体取决于您的操作系统,这可能已被 SignalR 连接耗尽。

【讨论】:

    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2016-05-19
    • 2010-11-28
    • 2023-01-27
    • 2011-03-17
    • 2012-03-15
    相关资源
    最近更新 更多