我有一个Asp.Net-Core 3.0 Web服务,它作为一个单一容器功能应用程序运行。这对我的Rest api非常有效。
但是我最近添加了SignalR集线器来添加通知服务,但这不适用于Azure功能中我的Web应用的托管版本。当我尝试使用.Net SignalRCore 3客户端连接到集线器时,出现以下错误:
在开始握手之前,服务器已断开连接。
当我将容器作为基本的Azure容器实例运行时,SignalR功能运行正常。
任何想法为什么会发生,以及是否甚至可以将SignalR集线器添加到Azure函数托管的Docker容器中?
[SignalR似乎无法按设计在功能应用程序中托管的Asp.Net-Core3 Docker容器实例中工作,因为功能应用程序应该是无状态的,而SignalR则不是。为此,您将需要使用来自AspNetCore Web服务的单独的Azure SignalR服务。
https://azure.microsoft.com/en-us/services/signalr-service/
并更改您的StartUp
类中的注册码。
var signalRServerBuilder = services.AddSignalR();
var signalRConnectionString = m_configuration[@"SignalRConnectionString"];
if (!string.IsNullOrWhiteSpace(signalRConnectionString))
{
signalRServerBuilder.AddAzureSignalR(signalRConnectionString);
}
如果您的代码中有此部分,您可以尝试取消注释此部分吗,>>
HandshakeTimeout = TimeSpan.MaxValue;