SignalR core:当启用web套接字并且Azure应用程序服务扩展到多个实例时,是否需要ARR关联?

SignalR core:当启用web套接字并且Azure应用程序服务扩展到多个实例时,是否需要ARR关联?,azure,asp.net-core,websocket,azure-web-app-service,asp.net-core-signalr,Azure,Asp.net Core,Websocket,Azure Web App Service,Asp.net Core Signalr,我正在开发一个asp.netcore2.2mvcweb应用程序。我们使用的是signal r core版本1.1.0(通过nuget软件包Microsoft.AspNetCore.signal添加)。客户端应用程序是一个angularjs应用程序,它引用了aspnet signaljavascript库的1.1.4 我们的应用程序部署在Azure上,托管应用程序服务水平扩展:目前有两个web应用程序实例启动并运行。我正在windows 10机器上使用谷歌chrome 75.0.3770.100版

我正在开发一个
asp.netcore2.2
mvcweb应用程序。我们使用的是
signal r core版本1.1.0
(通过nuget软件包
Microsoft.AspNetCore.signal
添加)。客户端应用程序是一个angularjs应用程序,它引用了
aspnet signal
javascript库的
1.1.4

我们的应用程序部署在Azure上,托管应用程序服务水平扩展:目前有两个web应用程序实例启动并运行。我正在windows 10机器上使用
谷歌chrome 75.0.3770.100版
测试我的应用程序的行为

将应用程序服务配置为启用web套接字,禁用ARR关联。我遇到了一个奇怪的行为,基本上,如果我测试我的应用程序并执行几次浏览器硬刷新(ctrl+F5),客户端应用程序将无法连接到通知中心。google chrome控制台中报告了以下错误:

WebSocket连接到'wss://myapp.azurewebsites.net/notificationsHub?id=3Fmlw2yC5qm3vi0qny50Qg'失败:WebSocket握手期间出错:意外响应代码:404

错误:无法启动传输“WebSocket”:null

GEThttps://myapp.azurewebsites.net/notificationsHub?id=nEYPEDw5f0AkLz5otCAOyA 404

错误:无法启动传输“ServerSentEvents”:错误:发生错误

GEThttps://myapp.azurewebsites.net/notificationsHub?id=2G9VVr5mcx7QT2wbSfwDLA&_=1561652513485 404

错误:无法启动传输“LongPolling”:错误

错误:无法启动连接:错误:无法初始化任何可用传输。

如果我更改应用程序服务配置,使web套接字和ARR关联都启用,则所有功能都会正常工作。我怀疑当应用程序服务水平扩展时,无论传输协议如何,都需要ARR关联(在我的情况下,服务器端应用程序和客户端浏览器都能够支持web套接字协议)

根据我的理解,microsoft官方文档声明当使用web套接字作为通信协议时,不需要客户端ARR关联,即使托管应用程序服务水平扩展到多个实例。在这一点上,我不确定我对Signal核心文档的理解

我错过什么了吗?我是否误解了官方文件

编辑2019年7月3日

对于对此主题感兴趣的人(使用signal-r core扩展web应用程序),您可以参考以了解所有详细信息

简单的回答是,新的signal-r核心实际上是有状态的,当应用程序扩展到多个服务器时,需要粘性会话

如果您仅使用Azure,则可以避免使用粘性会话,并通过使用


如果您不想使用此azure服务,则避免粘性会话的唯一选项是配置signal r core,以避免客户端-服务器协议协商,并仅通过使用web套接字来完成通信(有关所有详细信息,请参阅链接的github问题)。请注意,如果不支持web套接字,则这样做将失去降级到其他协议的能力,这是signal-r core的核心功能之一。

如果要禁用关联性,则我认为缺少的组件是托管的signal-r服务。随着应用程序服务的扩展,代理服务将为您提供会话信息。按照以下步骤将信号器服务作为服务依赖项添加到您的项目中。

您好,我希望避免使用Azure信号器服务,因为我还希望在Azure之外运行我的应用程序(例如,在客户端自己的基础设施上或在Azure以外的云中)。无论如何,你是对的,如果你想让你的应用程序处理连接而不将它们转移到azure Signal服务中,那么基本上需要亲和力。我在github上打开了一个问题,他们确认需要关联。运行应用程序而不需要关联和Azure signal r服务的唯一可用方法似乎是避免任何协议协商,并直接使用web套接字协议。您可以通过在客户端(在我的例子中是javascript浏览器客户端)使用一个配置,通过一个声明客户端希望跳过与服务器的协商的选项来实现这一点。我们对它进行了测试,结果很有效。如果你感兴趣,你可以参考我的