Android 信令器HTTP状态400多个客户端

Android 信令器HTTP状态400多个客户端,android,signalr,owin,signalr-hub,Android,Signalr,Owin,Signalr Hub,我正在运行一个应用程序,服务器端使用Signalr2.2.0,Android上使用SignalrJava客户端(自编译,最后一个GitHub版本)作为客户端 目前,有4个客户端连接到我的中心。有时,所有4个客户端都会同时接收HTTP状态400,并显示消息“连接id的格式不正确”(这些客户端以前已连接)。我对此进行了多次分析,但无法找到任何信息/模式,即发生这种情况的时间或原因 connecten通过JWT进行保护,令牌绝对有效。检索新令牌时,连接将停止并再次启动。除此之外,该错误不太可能与设备相

我正在运行一个应用程序,服务器端使用Signalr2.2.0,Android上使用SignalrJava客户端(自编译,最后一个GitHub版本)作为客户端

目前,有4个客户端连接到我的中心。有时,所有4个客户端都会同时接收HTTP状态400,并显示消息“连接id的格式不正确”(这些客户端以前已连接)。我对此进行了多次分析,但无法找到任何信息/模式,即发生这种情况的时间或原因

connecten通过JWT进行保护,令牌绝对有效。检索新令牌时,连接将停止并再次启动。除此之外,该错误不太可能与设备相关,因为该错误同时在所有4个客户端抛出

我知道,当客户的身份发生更改时,可能会发生此错误,但对我来说,同时更改4个客户的身份似乎不太可能


这是用于身份验证的服务器代码(Deepak)

在my Startup.cs中调用以下方法:

public static void ConfigureOAuth(IAppBuilder app, string audienceID, string sharedSecret)
{
    byte[] secret = TextEncodings.Base64Url.Decode(sharedSecret);

    app.UseJwtBearerAuthentication(
       new JwtBearerAuthenticationOptions
       {
           Provider = new MyOAuthBearerAuthenticationProvider(),
           AuthenticationMode = AuthenticationMode.Active,
           AllowedAudiences = new[] { audienceID },
           IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
            {
                new SymmetricKeyIssuerSecurityTokenProvider(Issuer, secret)
            }
       });
}
以下是MyAuthBeareAuthenticationProvider类的代码:

class MyOAuthBearerAuthenticationProvider : OAuthBearerAuthenticationProvider
{
    /// <summary>
    /// Get's a JWT from querysting and puts it to context
    /// </summary>
    public override Task RequestToken(OAuthRequestTokenContext context)
    {
        if (context.Token == null)
        {
            string value = context.Request.Query.Get("auth_token");
            if (!string.IsNullOrEmpty(value))   //token from queryString
            {
                context.Token = value;
            }
        }

        return Task.FromResult<object>(null);
    }
}

这是连接的客户端代码:

public boolean connect(String url, String token) {

    if (connected) {
        return true;
    }

    try {

        this.hubConnection = new HubConnection(url, "auth_token=" + token, true, logger);

        this.hubProxy = hubConnection.createHubProxy("MyHub");
        this.hubProxy.subscribe(this.signalRMethodProvider);

        this.hubConnection.stateChanged(stateChangedCallback);

        SignalRFuture<Void> awaitConnection = this.hubConnection.start();
        awaitConnection.get(10000, TimeUnit.MILLISECONDS);
        return true;
    }
    catch (InterruptedException | TimeoutException | ExecutionException e) {

        log.error("connect", e);
        return false;
    }
}
公共布尔连接(字符串url、字符串令牌){
如果(已连接){
返回true;
}
试一试{
this.hubConnection=新的hubConnection(url,“auth_token=”+token,true,logger);
this.hubProxy=hubConnection.createHubProxy(“MyHub”);
this.hubProxy.subscribe(this.signalRMethodProvider);
this.hubConnection.stateChanged(stateChangedCallback);
SignalRFuture awaitConnection=this.hubConnection.start();
waitingconnection.get(10000,时间单位为毫秒);
返回true;
}
捕获(InterruptedException | TimeoutException | ExecutionException e){
日志错误(“连接”,e);
返回false;
}
}

是否有人有想法,如何解决这个问题,或者我可以在哪里收到进一步的信息

多谢各位 -卢卡斯似乎很好。。。 你能做的可能的改变就是改变

awaitConnection.get(10000, TimeUnit.MILLISECONDS);

等待连接。完成(新操作(){ @凌驾 公共void运行(void obj)引发异常{ 日志d(标签“连接的轮毂”); } }).onError(新的ErrorCallback(){ @凌驾 公共无效onError(可丢弃错误){ 错误。printStackTrace(); Log.d(标签“SignalRServiceHub已取消”); } }).onCancelled(新的可运行(){ @凌驾 公开募捐{ Log.d(标签“SignalRServiceHub已取消”); } });
请共享您的代码我可以帮助您共享哪些代码?项目本身非常大。signalr授权类见我上次编辑,它包含用于授权的代码。对我来说似乎很好。。。请共享android连接开始代码。。。。你从哪里开始。。
awaitConnection.get(10000, TimeUnit.MILLISECONDS);
awaitConnection.done(new Action<Void>() {
            @Override
            public void run(Void obj) throws Exception {

                Log.d(TAG, "Hub Connected");
            }
        }).onError(new ErrorCallback() {
            @Override
            public void onError(Throwable error) {
                error.printStackTrace();
                Log.d(TAG, "SignalRServiceHub Cancelled");

            }
        }).onCancelled(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "SignalRServiceHub Cancelled");

            }
        });