我为网站创建了一个小模块,它使用SignalR来检测用户是否需要刷新浏览器。在本地它可以工作,但是当代码投入生产时,会产生数千个错误:
服务器端:( mainProject / Hubs目录):
public class AppVersionNotifierHub : Hub<IAppVersionNotifierHub>
{
public void CheckAppVersion(string version)
{
// if client has diffrent version, invoke callback
if (Global.Version != version)
{
Clients.Caller.NewAppVersion(Global.Version);
}
}
}
Javascript(类型脚本):
this.subscribeVersionChecker = () => {
var hub = (<any>$.connection).appVersionNotifierHub;
hub.client.newAppVersion = (version: string) => {
.. some logic
}
$.connection.hub.start(() => {
hub.server.checkAppVersion(customerVersion.text());
});
$.connection.hub.reconnected(() => {
setTimeout(() => {
hub.server.checkAppVersion(customerVersion.text());
}, 5000); // Restart connection after 5 seconds.
});
$.connection.hub.disconnected(() => {
setTimeout(() => {
$.connection.hub.start();
}, 10000); // Restart connection after 10 seconds.
});
};
为什么有些客户会产生错误?
答案 0 :(得分:7)
我现在发现了这个问题。 问题在于身份验证,我已经阅读了这篇文章:http://www.bitwisejourneys.com/signalr-authenticating-even-when-you-dont-think-it-is/并且经过一些思考我能够重现这个问题。
我的解决方案:当连接丢失时,我不是要重新连接,而是停止并重新启动连接(注意我已将事件从重新连接更改为重新连接!)
$.connection.hub.reconnecting(() => {
$.connection.hub.stop();
setTimeout(() => {
$.connection.hub.start();
}, 5000); // Restart connection after 5 seconds.
});