2012-03-12 91 views
1

我已成功实施SignalR。客户端导航时SignalR消息丢失

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

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

我可以看到邮件在InProcMessageBus中30秒后过期,但我不认为这是问题,因为我在我的机器上测试并且页面加载最多需要1-2秒。

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

谢谢。

+0

我很困惑,你是说如果一收到邮件就没有收到邮件就立即刷新? – davidfowl 2012-03-14 10:07:22

+0

我认为实际上这个消息是发送给客户端的,只是客户端错过了它,就像从未触发集线器事件一样,因为浏览器已经处于重新加载页面的模式,并且当新页面重新加载,客户并没有收到信息,就是在场外。我想你明确表示,这是设计。所以我必须跟踪服务器上的消息。不管怎么说,还是要谢谢你。 – 2012-03-14 13:24:57

回答

2

这是有点设计。当用户创建一个新的连接时,他们默认会得到一个新的连接。这可能是问题的原因,除非你已经定义了你自己的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/

+0

感谢您的回答。 对不起,我没有提到这个问题,但我已经这样做了。我使用登录的用户的id,并通过fiddler查看请求,我可以看到connectionId对于来自同一用户的每个请求都是相同的。 所以实际上,我的问题仍然存在,即使我使用我自己独特的connectionId。 – 2012-03-13 12:17:51