Почему SignalR получает 404 на переговорном вызове в моем веб-приложении Angular? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь инициализировать SignalR в моем приложении Angular 6 и вызываю отдельный веб-интерфейс ASP.Net для хабов.

CORS настроен правильно и разрешает вызовы, однако я застрял на этой ошибке:

Debug: Sending negotiation request: http://devapi.mywebapi.com/srtest/negotiate
http://devapi.mywebapi.com/srtest/negotiate 404 (Not Found)

Я установил 1.0 библиотеки NPM @ aspnet / signalr typcript и инициализирую ее так:

import { Component, OnInit } from "@angular/core";
import { HubConnection, HubConnectionBuilder, LogLevel } from '@aspnet/signalr';

@Component({
    selector: "test",
    templateUrl: "test.component.html"
})
export class TestComponent implements OnInit {
    private hubConnection: HubConnection;

    constructor() { }

    ngOnInit() {
        this.hubConnection = new HubConnectionBuilder()
            .withUrl("http://devapi.mywebapi.com/srtest")
            .configureLogging(LogLevel.Debug)
            .build();

        this.hubConnection
            .start()
            .then(() => console.log('Connection started!'))
            .catch(err => console.log('Error while establishing connection :('));
    }
}

Мой класс запуска определен как:

using Owin;
using Microsoft.Owin;

[assembly: OwinStartup(typeof(Api.Controllers.SignalR.Startup))]
namespace Api.Controllers.SignalR
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

и мой класс-концентратор:

using Microsoft.AspNet.SignalR;
using System.Threading.Tasks;
using System.Web.Http;

namespace Api.Controllers.SignalR
{
    public class SRTestHub : Hub
    {
        public void SendTest(string message)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<SRTestHub>();
            context.Clients.All.receiveMessage(message);
        }
    }
}

Что я делаю не так?

1 Ответ

0 голосов
/ 26 июня 2018

Есть некоторые проблемы:

1. Внутри хаба у вас уже есть свойство client

Вы наследуете свойство "Клиенты" из класса Hub. Достаточно следующего:

public class SRTestHub : Hub
    {
        public void SendTest(string message)
        {
            Clients.All.receiveMessage(message);
        }
    }

2. URL соединения не совпадает

Также в серверной части вы должны настроить то, что соответствует URL. Как сервер должен знать, что концентратор работает на "http://devapi.mywebapi.com/srtest"?

3. Похоже, вы смешиваете ядро ​​signalR и «старый» сигнализатор.

Клиент и сервер должны иметь одинаковые версии.

Предлагаю прочитать https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client

В случае, если вы используете ядро ​​сигнализатора, читайте: https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client?view=aspnetcore-2.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...