Угловой сигнал SignalR во время запроса на переговоры

122
13

Мы пытаемся использовать SignalR с Angular 2 и TypeScript. Кажется, мой клиентский код не работает, особенно установите соединение (без сгенерированного прокси)

Я следил за Angular 2 TypeScript с помощью SignalR, но я не включил сценарий SignalR/Hubs, поскольку я хочу, чтобы с автоматически созданным прокси-сервером, поскольку я не вижу никаких созданных для меня авторизованных классов прокси. Также упомянутый документ документации SignalR написан с использованием Javascript

Мы используем проверку подлинности Windows и Visual Studio 2015, Windows 7, IIS Express

Я получаю эту ошибку

Ошибка во время запроса на переговоры.

Класс концентратора

public class ServerRefreshHub : Hub
{
public ServerRefreshHub()
{

}

public override Task OnConnected()
{
//It seems hub is not connected as client code fails
}

public static void NotifyUsers()
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ServerRefreshHub>();
context.Clients.All.MessageFromServer("Hello");
}
}

Asp.Net WebAPI Startup

public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.Map(
"/signalr",
map =>
{
var hubConfiguration = new HubConfiguration {
EnableDetailedErrors = true };
map.RunSignalR(hubConfiguration);
});
}
}

Угловой код

declare var $: any;

@Injectable()
export class ServerNotifier {
private connection: any;
private proxy: any;

constructor() {

this.connection = $.hubConnection();
this.proxy = this.connection.createHubProxy('userCacheRefreshHub');
this.proxy.on('MessageFromServer', (message: string) =>
this.onMessageFromServer(message));

this.connection.start().done((data: any) => {
console.log('Now connected ' + data.transport.name + ', connection ID= ' + data.id);
}).fail((error: any) => {
console.log('Could not connect ' + error);
});
}

private onMessageFromServer(message: string) {

}
}

Package.Json

"@types/jquery": "2.0.47",
"@types/signalr": "^2.2.35",
"signalr": "^2.2.2"

Заметка:

"@types/jquery": "^ 3.2.16" вводит обновление для новых файлов, и я начал получать больше проблем, поэтому я отказался от этого только для типизации

В Консоли я вижу 200 Код ответа для этого запрошенного URL http://localhost:58965/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22serverrefreshhub%22%7D%5D&_=1509976299819

спросил(а) 2021-01-28T00:29:27+03:00 2 месяца, 2 недели назад
1
Решение
62

SignalR не генерирует для вас прокси-классы.

Вы должны настроить SignalR с помощью MapSignalR():

    public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();

var settings = new JsonSerializerSettings();
settings.ContractResolver = new SignalRContractResolver();
var serializer = JsonSerializer.Create(settings);
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer);

app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}

Добавьте атрибут HubName выше вашего класса концентратора:

[HubName("ServerRefreshHub")]
public class ServerRefreshHub : Hub

Не забудьте указать свой URL-адрес hubConnection при объявлении hubConnection и указать ваше имя-hubName при создании вашего прокси-сервера.

this.connection = $.hubConnection();
this.connection.url = "http://localhost:58965/signalr";
this.proxy = this.connection.createHubProxy('ServerRefreshHub');

ответил(а) 2021-01-28T00:29:27+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема