Signalr 客户端导航时信号器消息丢失

Signalr 客户端导航时信号器消息丢失,signalr,Signalr,我已经成功地实现了signer 我使用它来显示站点上用户之间的初始对话,因此当一个人想要与其他人聊天时,使用SignalR发送一条简单的消息 除了一种情况外,这很有效。如果请求发送的时间与接收请求的时间相同,则该请求正在执行新页面请求(如导航站点),则消息将丢失 我可以在InProcMessageBus中看到消息在30秒后过期,但我认为这不是问题所在,因为我正在我的机器上进行测试,页面加载最多需要1-2秒 那么,这实际上是设计的吗?还是我做错了 谢谢。这是设计的。当用户创建一个新连接时,默认情况

我已经成功地实现了signer

我使用它来显示站点上用户之间的初始对话,因此当一个人想要与其他人聊天时,使用SignalR发送一条简单的消息

除了一种情况外,这很有效。如果请求发送的时间与接收请求的时间相同,则该请求正在执行新页面请求(如导航站点),则消息将丢失

我可以在InProcMessageBus中看到消息在30秒后过期,但我认为这不是问题所在,因为我正在我的机器上进行测试,页面加载最多需要1-2秒

那么,这实际上是设计的吗?还是我做错了


谢谢。

这是设计的。当用户创建一个新连接时,默认情况下他们会得到一个新的clientid。这可能是问题的原因,除非您已经定义了自己的
IConnectionIdFactory
。如果您想确保客户端始终获得相同的id,您可以创建自己的实现,并将其设置为:

DependencyResolver.Register(typeof(IConnectionIdFactory), () => new CustomIdFactory());
信号机中的可扩展性


客户ID的工厂更换示例:

谢谢您的回答。对不起,我在问题中没有提到这一点,但我已经提到了。我使用了登录用户的id,通过fiddler查看请求,我可以看到来自同一用户的每个请求的connectionId都是相同的。所以事实上,我的问题仍然存在,即使我使用我自己唯一的connectionId。我很困惑,你是说如果你在消息发送后立即点击刷新,消息就没有收到吗?我认为实际上消息被发送到客户端,只是客户端错过了它,就像从未触发到集线器的事件一样,由于浏览器已经处于重新加载页面的模式,并且当新页面重新加载时,客户端当然不会收到消息。我想你说得很清楚,这是故意的。因此,我还必须跟踪服务器上的消息。无论如何,谢谢你。