C# CORS客户端页面的信号器OnDisconnected()未立即激发

C# CORS客户端页面的信号器OnDisconnected()未立即激发,c#,iframe,signalr,cors,disconnect,C#,Iframe,Signalr,Cors,Disconnect,我有一个部署在服务器上的信号聊天应用程序。用户看到的聊天框应由聊天应用程序在目标网站上的iframe中呈现 我在以下方面有问题: 已断开连接的任务(bool stopCalled) 如果聊天应用程序已启动并正在运行,并且与服务器建立了连接(对于管理员端),并且我关闭了选项卡,则OnDisconnected会立即被调用,stopCall=true 但是,从客户端页面(IIS中的一个单独网站)的端口81(而不是80)上,如果我连接并关闭窗口,则会延迟调用OnDisconnected,stopCall

我有一个部署在服务器上的信号聊天应用程序。用户看到的聊天框应由聊天应用程序在目标网站上的iframe中呈现

我在以下方面有问题:

已断开连接的任务(bool stopCalled)

如果聊天应用程序已启动并正在运行,并且与服务器建立了连接(对于管理员端),并且我关闭了选项卡,则OnDisconnected会立即被调用,stopCall=true

但是,从客户端页面(IIS中的一个单独网站)的端口81(而不是80)上,如果我连接并关闭窗口,则会延迟调用OnDisconnected,stopCalled为false

另一件奇怪的事情是,如果我从聊天应用程序呈现客户端聊天窗口(即在新选项卡中输入iframe的URL,从而呈现相同域上的页面),OnDisconnected立即被调用。因此,我认为这是由于客户:

  • 在iframe中渲染
  • 在不同的域上渲染
  • 两者
以前有人遇到过这种情况吗? 我不确定还有什么其他细节可以提供,如果需要,我可以提供更多

使用ASP.NET MVC 5,signalR 2.2.0,在IIS 10上运行

提前感谢,, 弗拉德

----更新----


我把一切都从iframe中拉了出来,这仍然在发生

您确定没有任何Javascript事件处理程序在admin案例中拦截页面卸载并在连接上显式调用
stop()
?您是否尝试进入信号器代码并在
stop()
内设置断点以查看是否在那里被调用?只是想知道,
stopCalled=true
位是可疑的。如果用户关闭浏览器或选项卡,stopCalled不是应该为true吗?奇怪的是,在同一场景中,当显式调用
stop()
时,客户端的
stopCalled
为真。请点击此处: