Tom*_*lik 2 c# asynchronous azure signalr
我为网站创建了一个小模块,它使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
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.
});
};
Run Code Online (Sandbox Code Playgroud)
为什么有些客户会产生错误?
我现在发现了这个问题.问题在于身份验证,我读过这篇文章:http://www.bitwisejourneys.com/signalr-authenticating-even-when-you-dont-think-it-is/经过一番思考后,我能够重现问题.
我的解决方案:当连接丢失时,我不是要重新连接,而是停止并重新启动连接(注意我已将事件从Reconnected更改为Reconnecting!)
$.connection.hub.reconnecting(() => {
$.connection.hub.stop();
setTimeout(() => {
$.connection.hub.start();
}, 5000); // Restart connection after 5 seconds.
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3732 次 |
| 最近记录: |