我在硬件防火墙后面有2个Web服务器(IIS 8.5),我们的应用程序使用SignalR进行一些实时更新。我们使用SQL Server作为背板来帮助我们在这种负载均衡的环境中工作。此外,我们在负载均衡器上使用粘性会话,以帮助我们在会话期间将用户保持在同一Web服务器上。当我们在这个硬件配置中运行时,我们至少丢失了1/3的消息。有时候我们会收到所有预期的消息,但通常我们会错过很多消息。
当我们在单个Web服务器上运行时,会收到所有消息。有没有人有任何解决这个问题的建议?我们打开了日志(客户端和服务器),看起来没有任何遗漏或损坏。我们真的很难过。
EDIT ---
我希望其他一些细节可以说明情况。
答案 0 :(得分:2)
终于解决了这个问题。真的有2个问题。首先是我们使用上面编辑中提到的内存用户列表。一旦我们意识到不能跨机器工作,我们就将其删除了。它还引导我们进入第二个问题,即SignalR 2如何使用IUserIdProvider
并且我们的调用应该是
Clients.User(userId).send(message)
而不是
context.Clients.Client(connection)
此代码自我们多年前首次使用SignalR以来就已存在,并且在我们升级SignalR版本时从未得到适当的更新
答案 1 :(得分:0)
在两台服务器上的web.config中指定相同的machineKey。