【问题标题】:SignalR connection won't start to IIS-hosted appSignalR 连接不会启动到 IIS 托管的应用程序
【发布时间】:2020-04-22 18:00:34
【问题描述】:

我创建了一个应用程序,并试图通过 SignalR 连接到后端。

ASP.NET Core 3.1 后端托管在 IIS 中以便于开发。

在客户端调用 StartAsync 方法成功协商,但在 GET 上永远挂起:

GET http://localhost:81/signalr?id=W3F2TRVrx_lxZoinHzTzmA

StartAsync() 调用无法返回。

这只发生在 IIS 上。当我启动应用程序自托管时,它就可以工作了。

WebAPI 的其余部分也适用于 IIS。只是 SignalR 无法连接。

知道为什么吗?我在这里找到了quiteafewquestions 和答案,但它们都没有真正解决这个精确的问题。

【问题讨论】:

  • 您是否安装了 IIS 虚拟主机捆绑包?当您将应用程序从 IIS express 部署到 IIS 时,应用程序池标识也会更改,所以您是否尝试将应用程序池标识更改为本地系统等帐户?如果您需要找到根本原因,那么您可能需要检查事件日志或转储文件以找到挂起调用堆栈。所以我们会知道线程中的待处理内容以及问题所在。
  • 在哪里可以找到虚拟主机捆绑包? Windows 可选功能?还是网络 PI?
  • dotnet.microsoft.com/download/dotnet-core/3.1。当您需要以进程内模型托管 asp.net 核心应用程序时,需要 Web 托管捆绑包。
  • 因为我在工作,所以现在不能尝试,但这是否意味着我根本无法托管 core31 应用程序?我的应用程序的其余部分按预期工作,对控制器方法的调用工作正常。
  • 所以我安装了该模块,但结果相同:除 SignalR 连接外,一切正常。

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


【解决方案1】:

所以其实我自己找到了答案:

默认情况下,IIS 上未启用 Websocket 支持。它是在 IIS 8 中引入的,必须从 Windows 的可选功能中启用:https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support

可选功能 -> IIS -> WWW 服务 -> 应用开发功能 -> Websocket 协议

【讨论】:

  • 我启用了 websocket 协议,所以它不能正常工作,为什么??请你帮帮我!
  • 究竟是什么不工作?它在没有 IIS 的情况下自托管时是否有效?
  • services.AddSignalR(),当我使用 Visual Studio 2017 运行时它可以工作,所以当我部署到 Window Server 2016 上的 IIS 时它不能工作
  • ....AddSignalR 调用本身是否崩溃?你有堆栈跟踪吗?由于这篇文章没有解决您的问题,也许您应该发表自己的帖子来进一步讨论您的具体问题。
  • 您是如何将 SignalR dotnet 项目部署到 IIS 的,与其他 dotnet 项目一样吗?您的 CORS 设置如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多