Описание проблемы
AspNetCore SignalR 1.1.0 - @ aspnet / signalr работает на Chrome и EdgeExplorer, но не на Firefox.
Протестированные браузеры
- [X]Microsoft EdgeHTML 17.17134 -> РАБОТЫ ?
- [X] Google Chrome Версия 71.0.3578.98 (Официальная сборка) (64-разрядная версия) -> РАБОТЫ ?
- [] Mozilla Firefox Quantum 64.0.2 (64-разрядный) -> НЕ РАБОТАЕТ ?
Версии программного обеспечения
- [X] .NET Core API
- [X] Угловая 7.2.0
- [X] @ aspnet / signalr 1.1.0
Вопрос на github.com/aspnet Ссылка:
https://github.com/aspnet/Docs/issues/10441
ПодробноОписание:
Я пытаюсь создать в реальном времени угловое 7 веб-приложение, используя signalr и aspnet Web Backend, но я заметил, что firefox не может установить соединение с помощью signalR?Забавно то, что Chrome и Edge CAN могут подключаться, отправлять и получать данные в концентратор.Только не firefox ...
Если я загляну в мои зависимости от проекта SocketAPI, я вижу, что у меня установлены следующие пакеты SignalR:
- Microsoft.AspNetCore.SignalR (1.1.0)
- Microsoft.AspNetCore.SignalR.Common (1.1.0)
- Microsoft.AspNetCore.SignalR.Core (1.1.0)
- Microsoft.AspNetCore.SignalR.Protocols.Json (1.1.0)
Если я посмотрю в свой package.json, который находится в проекте WebClient, я могу увидеть @ aspnet / signalr 1.1.0npm Я установил:
{
"name": "client-app",
"version": "0.0.0",
"scripts": {
...
},
"private": true,
"dependencies": {
...
"@aspnet/signalr": "^1.1.0",
...
},
"devDependencies": {
...
}
}
Конфигурация сервера
Я установил cors на моем SocketAPI Startup.cs вот так:
Внутри моего Метод ConfigureServices У меня есть этот код:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
//*************************
// Setup CORS For SignalR *
//*************************
services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
{
builder
.WithOrigins(Configuration.GetSection("URIs").GetValue<string>("CLIENT_URL")) // Only allow adress of BHR.WebClient
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
}));
services.AddSignalR();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Внутри моего Способ настройки
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseCors("CorsPolicy");
app.UseSignalR(routes =>
{
routes.MapHub<AppHub>("/app");
});
app.UseHttpsRedirection();
app.UseMvc();
}
Я также создал AppHub Класс, подобный так:
public class AppHub : Hub
{
public void SendToAll(string name, string message)
{
Clients.All.SendAsync("sendToAll", name, message);
}
public override async Task OnConnectedAsync()
{
Console.Write(Context.ConnectionId+" Connected");
//await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
Console.Write(Context.ConnectionId + " Disonnected");
//await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnDisconnectedAsync(exception);
}
}
Конфигурация клиента
На стороне клиента у меня есть HubService вот так:
import { Injectable, EventEmitter, Inject } from '@angular/core';
import { HubConnection, HubConnectionBuilder } from '@aspnet/signalr';
import * as signalR from '@aspnet/signalr';
@Injectable({
providedIn: 'root'
})
export class HubService {
constructor(
@Inject('SAPI_URL') private sapiUrl: string
) { }
hubConnections: Map<string, HubConnection> = new Map<string, HubConnection>();
OnReceive: EventEmitter<any> = new EventEmitter<any>();
// this.Connect();
BuildHub(name: string = "AppHub", url: string = "app"): HubConnection {
this.hubConnections.set(name, new HubConnectionBuilder()
.withUrl(this.sapiUrl + "/" + url, {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
})
//.configureLogging(signalR.LogLevel.Information)
//.configureLogging(signalR.LogLevel.Debug)
.build());
return this.hubConnections.get(name);
}
}
Следующий метод 'InitHubConnection' вызывается HomeComponent
InitHubConnection(): any {
let hubConnection: HubConnection = this.hubService.BuildHub();
console.log(hubConnection);
this.Connect();
}
Connect() {
this.hubService.hubConnections.get('AppHub')
.start()
.then(() => {
console.log('Connection started!');
this.hubService.hubConnections.get('AppHub').send("sendToAll", "John", "Doe");
})
.catch(err => {
console.log('Error while establishing connection :(')
//this.Connect(); Try reconnect
});
this.hubService.hubConnections.get('AppHub').on('sendToAll', (...args: any[]) => {
console.log(args);
})
}
Теперь, если япротестируйте это на Chrome и Edge, тогда это работает, но если я пытаюсь подключиться к Firefox, я получаю следующую ошибку в Firefox:
**Firefox can't establish a connection to the server at wss://localhost:44336/app. WebSocketTransport.js:85
[2019-01-16T12:26:53.183Z] Error: Failed to start the connection: null**
Я также искал в MS Docs и нашел это:
Источник: https://docs.microsoft.com/en-us/aspnet/signalr/overview/testing-and-debugging/troubleshooting#firefox-cant-establish-a-connection-to-the-server-at-address-error-in-firebug
Но, к сожалению, это устранение неполадок не дает подсказки для решения, поэтому я надеялся, что смогу спросить вас, ребята, об этой ошибке ... Это уже сводит меня с ума, потому что, похоже, работаетна Chrome и Edge ... Только не Firefox ...
Любая помощь по этому вопросу высоко ценится!
dotnet --info вывод или ОИнформация VS
PM> dotnet --info output
.NET Core SDK (gemäß "global.json"):
Version: 2.2.100
Commit: b9f2fa0ca8
Laufzeitumgebung:
OS Name: Windows
OS Version: 10.0.17134
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.2.100\
Host (useful for support):
Version: 2.2.0
Commit: 1249f08fed
.NET Core SDKs installed:
1.1.8 [C:\Program Files\dotnet\sdk]
1.1.9 [C:\Program Files\dotnet\sdk]
1.1.11 [C:\Program Files\dotnet\sdk]
2.1.103 [C:\Program Files\dotnet\sdk]
2.1.104 [C:\Program Files\dotnet\sdk]
2.1.200 [C:\Program Files\dotnet\sdk]
2.1.201 [C:\Program Files\dotnet\sdk]
2.1.202 [C:\Program Files\dotnet\sdk]
2.1.403 [C:\Program Files\dotnet\sdk]
2.1.500 [C:\Program Files\dotnet\sdk]
2.1.503 [C:\Program Files\dotnet\sdk]
2.2.100 [C:\Program Files\dotnet\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 1.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 1.0.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 1.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 1.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 1.1.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download