SignalR会产生大量403错误

时间:2015-09-01 15:39:03

标签: c# azure asynchronous 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);
        }
    }
}

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.
    });
};

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

  • 网站托管于azure
  • 要使用捆绑包,我已将动态生成的signalr.js文件复制到Scripts \ signalrhub.js文件中

1 个答案:

答案 0 :(得分:7)

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

  1. 在一个标签页中打开网站并登录
  2. 在其他标签页中打开网站并注销
  3. 重新启动服务器上的连接
  4. 选项卡1发送与选项卡2相同的身份验证令牌。服务器拒绝选项卡1但响应选项卡2
  5. 我的解决方案:当连接丢失时,我不是要重新连接,而是停止并重新启动连接(注意我已将事件从重新连接更改为重新连接!)

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