I want to migrate my .NET Core 5 React project to .NET 6, but I'm facing some issues with SignalR.
I've followed the article step by step from this Microsoft Docs to implement SignalR with .NET 6. And still I'm getting the same error as shown here: SignalR Error Log
Any assistance will be appreciated. My code snippets:
Program.cs
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddSignalR();
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins("https://localhost:44413/")
.AllowAnyHeader()
.WithMethods("GET", "POST")
.AllowCredentials();
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
app.MapFallbackToFile("index.html");
app.MapHub<ChatHub>("/chatHub");
app.Run();
ChatHub.cs
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Layout.js
const connection = new SignalR.HubConnectionBuilder()
.withUrl("/chathub")
.configureLogging(SignalR.LogLevel.Information)
.build();
async function start() {
try {
console.log("SignalR Connecting....");
await connection.start();
console.log("SignalR Connected.");
} catch (err) {
console.log(err);
setTimeout(start, 5000);
}
}
connection.onclose(async () => {
await start();
});
// Start the connection.
start();
SetupProxy.js
const createProxyMiddleware = require("http-proxy-middleware");
const { env } = require("process");
const target = env.ASPNETCORE_HTTPS_PORT
? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}`
: env.ASPNETCORE_URLS
? env.ASPNETCORE_URLS.split(";")[0]
: "http://localhost:9738";
const context = ["/weatherforecast", "/chathub"];
module.exports = function (app) {
const appProxy = createProxyMiddleware(context, {
target: target,
secure: false,
headers: {
Connection: "Keep-Alive",
},
});
app.use(appProxy);
};
CodePudding user response:
For anyone struggling with this in the future. Once I removed the headers from the proxy middleware and added ws: true
(enable websockets). It started as expected.
From
const createProxyMiddleware = require("http-proxy-middleware");
const { env } = require("process");
const target = env.ASPNETCORE_HTTPS_PORT
? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}`
: env.ASPNETCORE_URLS
? env.ASPNETCORE_URLS.split(";")[0]
: "http://localhost:9738";
const context = ["/weatherforecast", "/chathub"];
module.exports = function (app) {
const appProxy = createProxyMiddleware(context, {
target: target,
secure: false,
headers: {
Connection: "Keep-Alive",
},
});
app.use(appProxy);
};
To
const createProxyMiddleware = require("http-proxy-middleware");
const { env } = require("process");
const target = env.ASPNETCORE_HTTPS_PORT
? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}`
: env.ASPNETCORE_URLS
? env.ASPNETCORE_URLS.split(";")[0]
: "http://localhost:9738";
const context = ["/weatherforecast", "/chathub"];
module.exports = function (app) {
const appProxy = createProxyMiddleware(context, {
target: target,
secure: false,
ws: true, // <-- Add this
headers: { // <-- Remove this
Connection: "Keep-Alive", // <-- Remove this
}, // <-- Remove this
});
app.use(appProxy);
};