迁移到应用程序负载均衡器后面的 AWS fargate 后,SignalR 握手出现问题

Mod*_*man 8 amazon-web-services signalr .net-core aws-application-load-balancer signalr-client

迁移到应用程序负载均衡器后面的 AWS fargate 后,SignalR 握手出现问题。

\n\n

在我让它在带有 nginx 的 EC2 实例上运行之前,在遵循这个建议后工作得很好;\n SignalR 位于 Nginx 后面的 ASP.NET Core 中。\n但由于一些原因,我们必须将其移至 AWS fargate 并使用 Aws 应用程序负载均衡器 (ALB)。\n现在我们可以\xc2\xb4t 启动并运行 signalR。该服务有一个运行良好的 REST API。

\n\n

我仍然可以切换回旧的基础设施,这就像一个魅力。

\n\n

从 flutter 应用程序我得到这个:

\n\n
flutter: [Signals] Connection Restarting after http error - 404 - Not Found\nflutter: [Signals] Connection Closed - Cannot start a connection that is not in the \'Disconnected\' state.\nflutter: [Signals] [Transport] SEVERE: : Server returned handshake error: \'Handshake was canceled.\'\nflutter: [Signals] [Hub] SEVERE:  Server returned handshake error: \'Handshake was canceled.\'\n[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: type \'GeneralError\' is not a subtype of type \'Error\'\n0      ServerSentEventsTransport.connect.<anonymous closure> \npackage:signalr_client/server_sent_events_transport.dart:73\n1      _rootRunUnary  (dart:async/zone.dart:1192:38)\n2      _CustomZone.runUnary  (dart:async/zone.dart:1085:19)\n3      _CustomZone.runUnaryGuarded  (dart:async/zone.dart:987:7)\n4      _BufferingStreamSubscription._sendData  (dart:async/stream_impl.dart:339:11)\n5      _DelayedData.perform  (dart:async/stream_impl.dart:594:14)\n6      _StreamImplEvents.handleNext  (dart:async/stream_impl.dart:710:11)\n7      _PendingEvents.schedule.<anonymous closure>  (dart:async/stream_impl.dart:670:7)\n8      _rootRun  (dart:async/zone.dart:1180:38)\n9      _CustomZone.run  (dart:async/zone.dart:1077:19)\n10     _CustomZone.runGuarded  (dart:async/zone.dart:979:7)\n11     _CustomZone.bindCallbackGuarded.<anonymous closure>  (dart:async/zone.dart:1019:23)\n12     _rootRun (dart:async/zone.da<\xe2\x80\xa6>\n[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: Server returned handshake error: \'Handshake was canceled.\'\nflutter: [Signals] [Transport] SEVERE:Connection disconnected with error \'Server returned handshake error: \'Handshake was canceled.\'\'.\nflutter: [Signals] [Hub] SEVERE: Connection disconnected with error \'Server returned handshake error: \'Handshake was canceled.\'\'.\nflutter: [Signals] Connection Closed - Server returned handshake error: \'Handshake was canceled.\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

和这个:

\n\n
flutter: [Signals] [Transport] SEVERE: 2020-05-28 14:10:11.870554: Failed to start the transport \'HttpTransportType.WebSockets\': WebSocketException: Connection to \'https://api.com:0/hubs/people?id=[id]&access_token=[Token] was not upgraded to websocket\n
Run Code Online (Sandbox Code Playgroud)\n\n

它看起来与我们在 nginx 中解决的问题类似,但我认为 AWS ALB 应该默认处理它。\n如果我在本地运行该服务,它工作正常。

\n\n

我们用:

\n\n
    \n
  • 使用这个 signalR 客户端进行颤振:https ://github.com/soernt/signalr_client
  • \n
  • API:目标框架:
  • \n
  • netcoreapp2.1 Docker:mcr.microsoft.com/dotnet/core/aspnet:2.1-alpine
  • \n
  • Microsoft.AspNetCore.SignalR.Protocols.MessagePack:1.0.0
  • \n
\n\n

提前致谢

\n