我已经成功实施了SignalR。
我正在使用它来显示网站上用户之间的初始对话,因此当想要与其他人聊天时,会使用SignalR发送一条简单的消息。
除了一种情况外,这种方法很有效。如果请求是在应该发送请求的同时发送新页面请求,例如导航网站,则消息将丢失。
我可以看到消息在InProcMessageBus中30秒后过期,但我不认为这是问题,因为我在我的机器上测试并且页面加载最多需要1-2秒。
那么,这实际上是设计的吗?或者我做错了吗?
感谢。
答案 0 :(得分:2)
这是一种设计。当用户创建新连接时,默认情况下会获得新的clientid。除非您已定义自己的IConnectionIdFactory
,否则这可能是问题的原因。如果您想确保客户端始终获得相同的ID,您可以创建自己的实现,并将其设置为:
DependencyResolver.Register(typeof(IConnectionIdFactory), () => new CustomIdFactory());
SignalR的可扩展性 - https://github.com/SignalR/SignalR/wiki/Extensibility
clientID的示例工厂替换:http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances/