Я пытаюсь интегрировать Angular 4 + SPA с ASP.NET Core SignalR, начиная с это руководство.
Мне удалось интегрировать с помощью простого веб-приложения (клиент jquery + signalR) с приложением ASP.NET Core, поэтому конфигурация на стороне сервера кажется нормальной.
ASP.NET Core
Microsoft.AspNetCore.SignalR версии 1.0.0-alpha2-final
Startup.cs
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("chat");
});
ChatHub.cs
public class ChatHub: Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.InvokeAsync("broadcastMessage", name, message + " from SignalR hub");
}
public override Task OnConnectedAsync()
{
Clients.All.InvokeAsync("broadcastMessage", "system", $"{Context.ConnectionId} joined the conversation");
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync(System.Exception exception)
{
Clients.All.InvokeAsync("broadcastMessage", "system", $"{Context.ConnectionId} left the conversation");
return base.OnDisconnectedAsync(exception);
}
}
Рабочий клиент
Я ссылаюсь на signalr-client-1.0.0-alpha2-final.js
// Web sockets do not work, most probably due to IIS Express I am using for testing
var transport = signalR.TransportType.LongPolling;
var connection = new signalR.HubConnection(`http://localhost:60431/chat`, { transport: transport });
connection.start();
Это прекрасно работает.
Клиент Angular 4+ (не работает)
import { Component, OnInit } from '@angular/core';
import * as signalR from '@aspnet/signalr';
export class SignalrTestComponent implements OnInit {
private hubConnection: signalR.HubConnection;
ngOnInit() {
let transportType = signalR.TransportType.LongPolling;
this.hubConnection = new signalR.HubConnection('http://localhost:60431/chat', { transport: transportType });
this.hubConnection.start()
.then(() => {
console.log('Hub connection started')
})
.catch(() => {
console.log('Error while establishing connection')
});
}
Я получаю сообщение «Ошибка при установке соединения». Ошибка связана с тем, что клиент пытается связаться с http://localhost:60431/chat/negotiate
, который возвращает неправильный ответ (какой-то фиктивный текст, связанный с неправильным маршрутом, вместо ожидаемого JSON).
Я предполагаю, что параметр transport
игнорируется и, таким образом, инициируется согласование. Однако согласование AFAIK больше не поддерживается в версии SignalR для ASP.NET Core.
package.json, возможно, соответствующие зависимости
"@angular/common": "^5.2.0",
"@angular/compiler": "^5.2.0",
"@angular/core": "^5.2.0",
"@angular/http": "^5.2.0",
"@angular/platform-browser": "^5.2.0",
"@angular/platform-browser-dynamic": "^5.2.0",
"@aspnet/signalr": "^1.0.0-preview1-update1",
Вопрос: Как я могу правильно настроить HubConnection для включения желаемого протокола при использовании клиента Angular2 +?
Chat Controller
с маршрутом к/Chat
? Если нет, можете ли вы изменить свой маршрут наroutes.MapHub<ChatHub>("/chat"); //Notice the / <-- forward slash
- person penleychan   schedule 04.04.2018signalr-client-1.0.0-alpha2-final.js
, и я чувствую проблему с@aspnet/signalr": "^1.0.0-preview1-update1
зависимостью. Постараюсь работать предыдущей версией (alpha2
) вместоpreview1
. - person Alexei - check Codidact   schedule 04.04.2018http://localhost:60431/chat
разрешен правильно, и я получаю сообщение об ошибкеhttp://localhost:60431/chat
, что является нормальным (клиент должен предоставить идентификатор соединения). - person Alexei - check Codidact   schedule 04.04.2018