我正在使用 SignalR(具有跨域请求)2.3.0 版,用于集成到 ASP.NET 站点的网络聊天。一切正常。但我发现 SignalR 连接的奇怪行为。当我单击聊天选项卡中的引用进行文件下载时,SignalR 连接被中止,并且在我的 Hub 类中触发了 onDisconnected 方法。 FireBug 显示下一个 POST 请求:
http://*:81/signalr/abort?transport=longPolling&clientProtocol=1.4&token=eUpLNitKcmR1d2JhTTRvcHNVZmEwcG1EKzYvMElZbmg4aE5yam9xM3k0dz0_IjAsNGJmOWNhODUtNDU2NS00NWExLWFjMTgtNzgyN2FhZDA2Nj g1LGxvY2FsaG9zdCI1&State=1&connectionToken=hDXe9xIZtmrapjl1LRwtK9B%2BfYMoeuHka8ctBLaPa0YnjiN9iiFa%2BvFMBHIGpGH0h8qPEDgGZSRGwjMw3Wm1DJi6cUPtZjLca6%2FR2576SGksLAj3lnPN1JWilx Msn8%2Bf&connectionData=%5B%7B%22name%22%3A%22c%22%7D% 2C%7B%22name%22%3A%22voip%22%7D%5D,其中 * 是我的域。
它在 Mozilla Firefox(版本 30.0)中复制用于 LongPolling 或 Websocket 传输。我该如何解决这个问题?或者是 SignalR 或 Firefox 的 bug?
This bug https://github.com/SignalR/SignalR/issues/3109最近在 GitHub 上针对 SignalR 提起诉讼。基本思想是下载文件会导致 Firefox 触发window.onbeforeunload
事件会导致 SignalR 关闭所有正在进行的连接。
目前,解决方法是将一个处理程序附加到客户端的断开连接事件,该事件将调用$.connection.start
短暂之后再次window.setTimeout
.
您还可以取消绑定 SignalR 的 onbeforeunload 处理程序:$(window).unbind("beforeunload")
。这样做的缺点是,当用户离开运行 SignalR 的页面时,Firefox 可能无法正常断开连接。如果没有正常断开连接,SignalR 将等待 30 秒以上,然后客户端才会超时并调用OnDisconnected
处理程序在Hub
or PersistentConnection
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)