- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发 asp.net core 2.2
MVC Web 应用程序。我们正在使用signal r core version 1.1.0
(通过 nuget 包 Microsoft.AspNetCore.SignalR
添加)。客户端应用程序是一个 angularjs 应用程序,引用版本 1.1.4
aspnet-signalr
的JavaScript 库。
我们的应用程序部署在 Azure 上,托管应用程序服务水平扩展:目前有 two instances
我们的网络应用程序已启动并运行。我正在使用 Google chrome version 75.0.3770.100
测试我的应用程序的行为在 Windows 10 计算机上。
应用服务已配置为启用 Web 套接字并禁用 ARR 关联性。我遇到了一种奇怪的行为,基本上,如果我测试我的应用程序并执行多次浏览器硬刷新(ctrl + F5),客户端应用程序无法连接到通知中心的情况会随机发生。 Google Chrome 控制台中报告以下错误:
WebSocket connection to 'wss://myapp.azurewebsites.net/notificationsHub?id=3Fmlw2yC5qm3vi0qny50Qg' failed: Error during WebSocket handshake: Unexpected response code: 404
Error: Failed to start the transport 'WebSockets': null
GET https://myapp.azurewebsites.net/notificationsHub?id=nEYPEDw5f0AkLz5otCAOyA 404
Error: Failed to start the transport 'ServerSentEvents': Error: Error occurred
GET https://myapp.azurewebsites.net/notificationsHub?id=2G9VVr5mcx7QT2wbSfwDLA&_=1561652513485 404
Error: Failed to start the transport 'LongPolling': Error
Error: Failed to start the connection: Error: Unable to initialize any of the available transports.
如果我更改应用服务配置,以便同时启用 Web 套接字和 ARR 关联性,一切都会顺利进行。我的怀疑是,当应用程序服务水平扩展时,无论传输协议(protocol)如何,都需要 ARR 关联(在我的例子中,服务器端应用程序和客户端浏览器都能够支持 Web 套接字协议(protocol)) 。
根据我的理解,微软官方文档指出,使用 Web 套接字作为通信协议(protocol)时,不需要客户端 ARR 关联,即使托管应用服务水平扩展到多个实例。目前我不确定我对 signalr 核心文档的理解。
我错过了什么吗?我是否误解了官方文档?
2019 年 7 月 3 日编辑
对于这个主题(使用signal-r核心扩展Web应用程序)感兴趣的人,可以引用this github issue了解所有详细信息。
简单的回答是,新的 signal-r 核心实际上是有状态的,并且当应用程序扩展到多个服务器时需要粘性 session 。
如果您仅使用 Azure,则可以通过使用 Azure signalr service 避免使用粘性 session 并获得其他一些好处。 .
如果您不想使用此 Azure 服务,避免粘性 session 的唯一选择是配置 signal r 核心,以便避免客户端-服务器协议(protocol)协商,并且仅使用 Web 套接字完成通信(有关所有详细信息,请参阅链接的 github 问题)。请注意,这样做您将失去在不支持 Web 套接字时降级到其他协议(protocol)的能力,这是 signal-r 核心的核心功能之一。
最佳答案
如果您想禁用关联性,那么我认为您缺少的组件是托管的 SignalR 服务。这是代理服务 maintain当您的应用服务扩展时为您提供 session 信息。关注这些steps将 SignalR 服务作为服务依赖项添加到您的项目中。
关于azure - SignalR核心: is ARR affinity needed when web sockets are enabled and the Azure app service is scaled out to multiple instances?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56795602/
这个问题在这里已经有了答案: Unexpected result with `in` operator chaining (1 个回答) Chaining "is" operators (4 个回答)
我想知道为什么下面的代码会崩溃。 int main( ) { int arr = 1 && arr; return 0; } 但不是下面的代码 int main( ) {
什么是计算一组数字平均值的更准确方法,ARR[0]/N+ARR[1]/N...+ARR[N-1]/N 或 (ARR[0]+ARR[1]...+ARR[N-1])/N? (ARR 是一组数字,N 是该组
#include using namespace std; int main() { int arr[5] = {5, 8, 1, 3, 6}; int len = *(&arr +
在下面的代码中,是什么意思 vector avector (arr, arr + sizeof(arr) / sizeof(arr[0]) ); 在 main() 中? vector bubbleSo
我主要是这样使用的: arr.push(element) 但我见过有人这样使用: arr.push.apply(arr, element) 这两种方法有什么区别? 最佳答案 我认为在使用“列表”时更常
任务是重新排列一个数组,使 arr[i] 变成 arr[arr[i]],复杂度为 O(1)额外的空间。 例子: 2 1 3 5 4 0 变成: 3 1 5 0 4 2 我可以想到一个O(n²) 的解决
今天我来了一篇 Eric Lippert 的文章他试图澄清运算符优先级和评估顺序之间的迷思。最后有两个代码片段让我感到困惑,这是第一个片段: int[] arr = {0};
view和copy的意思是不同的,如果你有一个view,那么如果你改变1另一个也应该改变,如果你有一个副本那么改变1应该不会影响另一个 有 3 种制作 view 的方法/copy数组的 arr_2 =
这个问题在这里已经有了答案: How does *(&arr + 1) - arr give the length in elements of array arr? (3 个回答) Why are
我想将自己的值输入到 20 个大数组中,并将其复制到 2 个 10 个小数组中,然后必须打印第二个数组的值。我收到错误 ArrayIndexOutOfBoundsException 我的代码有什么问题
我是 C++ 新手。我正在尝试实现一个堆栈。我声明 arr默认构造函数中的命名变量。 但是当我编译我的代码时,我收到一条错误消息 'arr' was not declared in this scop
这个问题已经有答案了: Pointers - Difference between Array and Pointer (2 个回答) 已关闭 6 年前。 (C语言)之间有什么区别 int * a i
这个问题已经有答案了: How come an array's address is equal to its value in C? (6 个回答) 已关闭 4 年前。 这两个打印有什么区别,我在两
是一样的 char* s1[size]; 到 char** s2 = malloc(size * sizeof(char*)); 它们有什么区别吗? 最佳答案 理论上,*arr[]和**arr是不同的
我有一个字符串数组 arr[5][8] = {...} (声明了每个字符串),我试图了解 arr[3 的值是什么] - arr[2] 是什么以及它的类型是什么。我无法理解为什么地址之间的差异以字节为单
var arr = [foo,bar,xyz]; arr[arr.indexOf('bar')] = true; 在 JS 中有更简单的方法吗? 最佳答案 你可以只使用对象。 var obj = {f
这个问题在这里已经有了答案: What is the difference when we use array names instead of spread operator? (3 个答案) 关
在修改屏蔽数组中的数据时,我没想到会出现以下行为。似乎可以使用 [] 操作数修改某些值,但不是全部。但是,如果您访问它的数据属性,那么您可以修改所有内容。仅当元组中某个单元格的掩码中存在 True 值
我不明白如何确定以下元素: *(arr+1)[1] - 7 被打印出来。 **(arr+1) - 打印 4。 #include int main() { int arr[3][3]={1,2
我是一名优秀的程序员,十分优秀!