Android 信令器HTTP状态400多个客户端
我正在运行一个应用程序,服务器端使用Signalr2.2.0,Android上使用SignalrJava客户端(自编译,最后一个GitHub版本)作为客户端 目前,有4个客户端连接到我的中心。有时,所有4个客户端都会同时接收HTTP状态400,并显示消息“连接id的格式不正确”(这些客户端以前已连接)。我对此进行了多次分析,但无法找到任何信息/模式,即发生这种情况的时间或原因 connecten通过JWT进行保护,令牌绝对有效。检索新令牌时,连接将停止并再次启动。除此之外,该错误不太可能与设备相关,因为该错误同时在所有4个客户端抛出 我知道,当客户的身份发生更改时,可能会发生此错误,但对我来说,同时更改4个客户的身份似乎不太可能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进行保护,令牌绝对有效。检索新令牌时,连接将停止并再次启动。除此之外,该错误不太可能与设备相
这是用于身份验证的服务器代码(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");
}
});