Попытка создать чат на основе онлайн-примера с использованием ASP. Net Core 3.1 и Angular.
Следующее отлично работает на IIS Express, но не на локальном IIS .
Сообщение об ошибке: WebSocketTransport. js: 85 Ошибка подключения WebSocket к 'ws: // localhost / MyCoreAPI / ChatHub': Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 400
Запуск :
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
public void Configure(IApplicationBuilder app,
IWebHostEnvironment env,
ApplicationDbContext context)
{
app.UseCors("EnableCORS");
app.UseMiddleware<ErrorHandlingMiddleware>();
app.UseMiddleware<TokenServiceMiddleware>();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(route =>
{
route.MapHub<ChatHub>("/ChatHub");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=auth}/{action}/");
});
app.Run(async (c) =>
{
await c.Response.WriteAsync("My Core Web API");
});
}
ChatHub:
public class ChatHub : Hub
{
public Task SendMessageToAll(Message message) =>
Clients.All.SendAsync("receiveMessage", message);
}
Клиент:
export class ChatService {
receiveMessage = new EventEmitter<Message>();
connectionEstablished = new EventEmitter<Boolean>();
private connectionIsEstablished = false;
private _hubConnection: HubConnection;
constructor() {
this.createConnection();
this.registerOnServerEvents();
this.startConnection();
}
async sendMessage(message: Message) {
console.log(message);
await this._hubConnection.invoke('SendMessageToAll', message);
}
private createConnection() {
this._hubConnection = new HubConnectionBuilder()
.configureLogging(LogLevel.Debug)
.withUrl('http://localhost/MyCoreAPI/ChatHub', {
skipNegotiation:true,
transport:HttpTransportType.WebSockets
})
.build();
}
private startConnection(): void {
this._hubConnection
.start()
.then(() => {
this.connectionIsEstablished = true;
console.log('Hub connection started');
this.connectionEstablished.emit(true);
})
.catch(err => {
console.log('Error while establishing connection, retrying...');
setTimeout(function () { this.startConnection(); }, 5000);
});
}
private registerOnServerEvents(): void {
this._hubConnection.on('receiveMessage', (data: any) => {
console.log(data);
this.receiveMessage.emit(data);
});
}
}
}
В IIS Express с использованием 'http://localhost: 59235 / ChatHub 'все работает. Когда я переключаюсь на локальный IIS с помощью «http://localhost/MyCoreAPI/ChatHub», я получаю сообщение об ошибке.