有一个SignalR中心作为asp.net core 2 web应用程序运行,当我尝试使用.net桌面应用程序连接到集线器时,我在下面的图片中给出了这个错误。
当客户端尝试连接到集线器(await _connection.StartAsync()
)时会发生这种情况。
在localhost上运行集线器和客户端时,它正在工作。
我在服务器上使用 Microsoft.AspNetCore.SignalR v1.0.0-alpha2-final 桌面客户端上的 Microsoft.AspNetCore.SignalR.Client v1.0.0-alpha2-final 。
从.NET destop app连接到HUB:
var url = $"http://REMOTE_IP/chat?JwtToken={token}";
_connection = new HubConnectionBuilder()
.WithUrl(url)
.WithConsoleLogger()
.Build();
await _connection.StartAsync(); // IT THROWS ERROR HERE
ASP.net core 2 web:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSignalR();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
try
{
...
app.UseJwtSignalRAuthentication();
...
app.UseSignalR(route =>
{
route.MapHub<MyHub>("chat");
});
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
身份验证令牌扩展:
public static void UseJwtSignalRAuthentication(this IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
if (string.IsNullOrWhiteSpace(context.Request.Headers["Authorization"]))
{
try
{
if (context.Request.QueryString.HasValue)
{
var token = context.Request.QueryString.Value
.Split('&')
.SingleOrDefault(x => x.Contains("JwtToken"))?
.Split('=').Last();
if (!string.IsNullOrWhiteSpace(token))
context.Request.Headers.Add("Authorization", new[] {$"Bearer {token}"});
}
}
catch { }
}
await next.Invoke();
});
}