SignalR产生大量403错误

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)

为什么有些客户会产生错误?

  • 网站托管在azure上
  • 为了使用bundle,我将动态生成的signalr.js文件复制到Scripts\signalrhub.js文件中

Tom*_*lik 7

我现在发现了这个问题.问题在于身份验证,我读过这篇文章:http://www.bitwisejourneys.com/signalr-authenticating-even-when-you-dont-think-it-is/经过一番思考后,我能够重现问题.

  1. 在一个选项卡中打开站点并登录
  2. 在其他选项卡中打开站点并注销
  3. 重新启动服务器上的连接
  4. 选项卡1发送与选项卡2相同的身份验证令牌.服务器拒绝选项卡1但响应选项卡2

我的解决方案:当连接丢失时,我不是要重新连接,而是停止并重新启动连接(注意我已将事件从Reconnected更改为Reconnecting!)

    $.connection.hub.reconnecting(() => {
          $.connection.hub.stop();
          setTimeout(() => {
             $.connection.hub.start();
             }, 5000); // Restart connection after 5 seconds.
    });
Run Code Online (Sandbox Code Playgroud)