AspNetCore SignalR 1.1.0 - @ aspnet / signalr работает на Chrome и EdgeExplorer, но не на Firefox - PullRequest
0 голосов
/ 16 января 2019

Описание проблемы

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

1 Ответ

0 голосов
/ 17 января 2019

Решение

Похоже, у меня отладчик возился с сокетом ...

Ниже приведены две ссылки с изображениями, показывающими правильный и неправильный регистр:

НЕПРАВИЛЬНО -> У меня есть Настройки в Chrome и без отладчика скриптов

ПРАВИЛЬНО -> Подобные настройки устранили ошибку, и все браузеры были способны общаться друг с другом

Я надеюсь, что это может помочь другим с той же проблемой!

С уважением

...