首页 文章

SignalR .NET Core 2.1无法在代理的docker容器上运行

提问于
浏览
3

我有一个.NET Core 2.1 Web API(使用 2.1.0-preview1-final )在本地使用SignalR 1.0.0-preview1-final 正常工作 . 我正在使用一个Angular应用程序,它有一个包 "@aspnet/signalr": "1.0.0-preview1-final" 所以一切都匹配,当我在本地运行程序时,我有两个HTTP endpoints 和Hub正常工作 .

当我部署到我的虚拟服务器时,我有一个Nginx反向代理,它向其后面的所有应用程序发送请求 . 我正在使用Docker,当我们部署整个生态系统的v1.0时,我在其他项目中没有遇到任何问题 .

我在这个特定场景中的差异有两个:

我正在捕获API的日志,我可以看到,当我尝试连接到集线器时,我会回来:

info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[4]
      Policy execution successful.
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[2]
      Successfully validated the token.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[1]
      Authorization was successful.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 7.4652ms 200 application/json

所以我假设这是正确的 . 现在在客户端(Angular app):我看到了这个:

错误:无法启动连接 . 错误:找不到可用的传输 .

但如果我检查一下反应:

{"connectionId":"nHzKKYtp0ITwlEntjqLprA","availableTransports":[{"transport":"WebSockets","transferFormats":["Text","Binary"]},{"transport":"ServerSentEvents","transferFormats":["Text"]},{"transport":"LongPolling","transferFormats":["Text","Binary"]}]}

UPDATE

比较当地运行时的响应我得到:

{"connectionId":"4ea7b1ea-8754-472b-baef-527073872d2a","availableTransports":["WebSockets","ServerSentEvents","LongPolling"]}

这意味着转移格式没有限制?不确定's relevant either...It'是否非常奇怪,这与此处发生的情况相同:SignalR no transport

------更新结束--------

所以我的问题是:

我是否破坏了SignalR连接,因为我设置了 proxy_buffer ?如果是这样,有没有办法让IS4和SignalR在同一个Nginx实例后面运行? - 为了让事情变得更加困难,我正在使用一个使用docker-gen自动生成的Nginx模板 .

如果我对Nginx的更改不应该破坏SignalR,为什么不 Build 连接?

谢谢!

UPDATE! FOUND THE ISSUE!!!

我写这个是因为我觉得这对其他人有用 .

我遇到的问题是我在客户端和API上都使用了preview1,但是在我创建 Dockerfile 的那天,我无法让 FROM microsoft/dotnet:2.1.0-preview1-aspnetcore-runtime 工作,所以我选择使用 preview2FROM microsoft/dotnet:2.1.0-preview2-aspnetcore-runtime ,这就是问题所在 . 现在我迅速更改了客户端和API以使用SignalR的预览,我可以使连接工作 . 快乐的时光!希望这有用:)所以不仅客户端和API需要匹配,但实际的docker镜像也需要对齐 .

1 回答

  • 1

    我遇到的问题是我在客户端和API上都使用了preview1,但是在我创建Dockerfile的那天,我无法使用 FROM microsoft/dotnet:2.1.0-preview1-aspnetcore-runtime ,因为我有元数据问题(取自错误)所以我选择使用preview2: FROM microsoft/dotnet:2.1.0-preview2-aspnetcore-runtime ,这就是问题所在 . 现在我快速更改了客户端和API以使用 SignalR 的预览,我可以使连接正常工作 . 快乐的时光!希望这有用:)所以不仅客户端和API需要匹配,但实际的docker镜像也需要对齐 .

    因此,在创建图像时,请确保您已同步客户端版本,net Coresignalrversión和 Dockerfile 的运行时版本

相关问题