问题标签 [signalr-backplane]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
999 浏览

c# - SignalR + Redis 背板 = System.InvalidOperationException:队列已满

我将 SignalR 与 redis 背板一起使用。要设置它,我使用简单的代码

一切正常,但我开始出现以下异常。

Portal UI 中未处理的异常:System.InvalidOperationException:队列已满。在 Microsoft.AspNet.SignalR.Messaging.ScaleoutStream.Send(Func2 send, Object state) at Microsoft.AspNet.SignalR.Infrastructure.Connection.Send(ConnectionMessage message) at Microsoft.AspNet.SignalR.Transports.TransportConnectionExtensions.SendCommand(ITransportConnection connection, String connectionId, CommandType commandType) at Microsoft.AspNet.SignalR.Transports.ForeverTransport.ProcessRequestCore(ITransportConnection connection) at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequestPostGroupRead(HostContext context, String groupsToken) at Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod[T1,T2,T3,TResult](Func4 func, T1 arg1, T2 arg2, T3 arg3) --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices。 Microsoft.Owin.Mapping.MapMiddleware.d__0.MoveNext() 处的 TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.d__5.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪--- - 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware 的 Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)1.<Invoke>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware1.d__0.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.d__5.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.d__2.MoveNext() --- 堆栈跟踪从之前抛出异常的位置结束---在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline。StageAsyncResult.End(IAsyncResult ar) at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我查看了 redis 缓存。好像没问题。它有足够的空间。

'队列已满'是什么意思?这是什么队列?如何避免此类异常?

0 投票
0 回答
396 浏览

signalr - 使用 sqlserver 横向扩展时,信号器无法连接到 LongPolling 或 serverSentEvents 传输

当我将 sqlserver scaleout 与 signalr 一起使用时GlobalHost.DependencyResolver.UseSqlServer,它无法连接LongPollingserverSentEvents传输。

以前任何人都遇到过这个错误,我正在使用signalr 2.2.1and signalr.sqlserver 2.2.1

这是我在 owin 启动类中的完整代码

事件源已连接:

0 投票
0 回答
130 浏览

c# - 在 SignalR 中连接到背板时检测错误

有没有办法检测 signaR 集线器是否无法连接到给定的背板(SQL 或 REDIS)。例如,给定一个错误的连接字符串或无法访问背板服务器?

这是我的简化启动类:

这样我们就可以记录任何错误并在我们的 APM 软件中记录下来。

0 投票
1 回答
623 浏览

azure - 使用 Azure Redis 缓存服务横向扩展 Signal R

我想利用 Azure Redis 缓存来横向扩展 Signal R。但我对横向扩展几乎没有疑问。

在给定的实例中,可能有 100 个客户端与信号 r 集线器连接。

当我们看到 Azure Redis 缓存定价时

在此处输入图像描述

它说最大连接数 256、1000 等。这些是否表示可以使用此 Redis 服务作为其背板连接到 Signal R Hub 的最大客户端数?

或者这是否意味着在给定的时间点可以有 256、1000 等连接可以与 Redis 服务交换数据?有人可以详细说明这一点。

Redis 服务上所述的连接和使用 Signal R 集线器建立的连接是否相互关联?

0 投票
0 回答
100 浏览

angularjs - Signalr 服务总线背板问题

我在服务总线中遇到问题,它有时会调用客户端方法,有时会中断。

这是我的场景-

当快递员为客户出价时,它会调用服务器端方法,调用成功后通过signalR重定向到客户端函数,并刷新页面并获取新信息(使用烤面包机)。

这是完整的代码-

*服务器端调用

*NewBidHub.cs

*客户端调用

*启动.cs

*版本

服务总线 - 2.1.0.0

jquery-signalR - 2.1.2

你能帮帮我吗!将不胜感激。

提前致谢。

0 投票
1 回答
588 浏览

signalr - SignalR 简单网关

我有一个由网关和几个后端服务组成的 Web 应用程序。网关是一个自托管的 OWIN 应用程序,涵盖了身份验证、授权和将 api 调用路由到后端等问题。

我有兴趣在我的一项后端服务中使用 SignalR 将数据推送到客户端。例如,用户开始一个长时间运行的查询,当数据可用时将数据反馈给客户端。

我设法将横向扩展文章中的背板用作消息传递机制(尽管它似乎不是为此类消息传递而设计的) SignalR 横向扩展解释

“网关”集线器代码:(逻辑仅用于测试目的)

后端控制器代码

但是,这是一个大型企业应用程序,我不希望网关对后端服务的实际代码有任何依赖。但是该示例仅在网关和后端服务中都定义了同名集线器时才有效。

一方面,我试图避免在网关中放置此类专用代码,另一方面,我想利用使用实际函数名称和参数的能力。我不想要具有单一功能的“主集线器”。

有没有办法做到这一点?

0 投票
1 回答
1481 浏览

c# - 使用 AspNet SignalR 连接 Redis

我只是想验证我的设置。它似乎有效,但我想和你们一起验证我的设置。

我在我的网站上托管了 SignalR。在我的 Startup.cs 我做:

现在,我在我的其他 Web 服务中像这样使用它:

这看起来对吗?这是否意味着 SignalR 连接超时为 10 秒(因为 KeepAlive 设置为 10 秒)?

这是我的使用图(假设网站和网络服务器有大量流量,Azure 需要为网站和网络服务器启动另一台计算机

对不起这个愚蠢的问题。今天刚刚发现了 redis,想用 SignalR 扩展我的网站。

0 投票
2 回答
1565 浏览

websocket - SignalR 结合负载均衡器丢失消息

我在硬件防火墙后面有 2 个 Web 服务器 (IIS 8.5),我们的应用程序使用 SignalR 进行一些实时更新。我们使用 SQL Server 作为背板来帮助我们在这个负载平衡的环境中工作。此外,我们在负载均衡器上使用粘性会话来帮助我们在会话期间将用户保持在同一 Web 服务器上。当我们在这种硬件配置中运行时,我们会丢失至少 1/3 的消息。有时我们会收到所有预期的信息,但更多时候我们会错过很多信息。

当我们在单个 Web 服务器上运行时,所有消息都会被接收。有人对解决此问题有任何建议吗?我们已经打开了日志(客户端和服务器),看起来没有任何东西丢失或损坏。我们真的很难过。

编辑 - -

我希望一些额外的细节可以说明情况。

  • 服务器到客户端的消息正在丢失。几乎我们所有的通信都是服务器到客户端。
  • 我们仅使用基于 IP 的粘性会话,并且限制为 5 分钟,但我们会在 5 分钟内丢失消息。
  • 这是一些旧的 SignalR 代码,自 SignalR 1(甚至更早版本)以来仅被最低限度地触及。 我们在内存中保留了用户列表以及他们的连接,我们使用该列表将通知发送回客户端。这似乎很可能是问题的原因,但是对于粘性会话,用户应该至少在同一台服务器上停留 5 分钟,对吗?
  • 此用户列表将用户名映射到连接 ID。当我们的后端服务(在另一台机器上)用用户名而不是连接 ID 发送回消息时,这很有用。
0 投票
1 回答
1223 浏览

asp.net - SignalR / 缓存中的内存泄漏

我正在通过使用 Windbg 分析内存转储来调查一个运行高达 10gb 内存的 web 应用程序。

这是 !dumpheap -stat 输出的底部:

所以有近 4000 万个实例System.Runtime.Caching.ExpiresBucket,总共使用了近 4GB 的内存。System.Runtime.Caching类出现在头号罪犯中相当多。

我随机抽取了一个System.Runtime.Caching.ExpiresBucket类的实例,并对其进行了 !gcroot 操作。产生 1 个线程需要很长时间(可能需要 30 分钟)......可能还有更多,但此时我中断了操作。

引用链超过 150 万行!但我可以在这里展示重要的部分:

我在 !objsize 上运行000000f92d0b84e0 Microsoft.AspNet.SignalR.SqlServer.SqlMessageBus,但到目前为止它已经运行了大约 20 分钟,我期待一个非常高的数字。

是什么导致泄漏?SignalR 中是否存在使用背板的已知错误?我们使用的是 v2.0.2,我相信它不是最新的。但我没有在互联网上找到任何涉及 SignalR 和缓存的内存泄漏的文档。

编辑:

为了回答 Pawel 关于 SqlMessageBus 实例的问题,这里有更多 Windbg 输出:

0 投票
0 回答
103 浏览

c# - SignalR SQL Server Scaleout 用户分配

我已经使用 SQL Server 实现了 signalR Scaleout,如下所示:https ://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-sql-server

所以,我有服务器 1 和服务器 2。

由于无法找到明确的答案,我想知道的是,当服务器 1 出现故障时,连接到服务器 1 的用户会发生什么情况。

这些用户是通过 signalR 自动连接到服务器 2 还是完全断开连接?