SignalR 连接无法协商版本
SignalR connection cannot negotiate version
我正在为我几个月前停止工作的项目使用托管的 blazor wasm。但最近我决定改变其中的一些东西,但它不再起作用了。
当我尝试建立 SignalR 连接时,它向 https://localhost:44322/gameHub/negotiate?negotiateVersion=1 地址发出 post 请求,该地址始终是 return 404 代码。
我正在使用 iis express 来托管应用程序。
这是我的第一个 web 和 blazor 项目,所以我不知道应该提供哪些信息。我看到了关于这个问题的不同主题,但我什至不明白人们在那里提交的内容。
从浏览器调试菜单请求信息
Request URL: https://localhost:44322/gameHub/negotiate?negotiateVersion=1
Request Method: POST
Status Code: 404
Remote Address: [::1]:44322
Referrer Policy: strict-origin-when-cross-origin
:authority: localhost:44322
:method: POST
:path: /gameHub/negotiate?negotiateVersion=1
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 0
origin: https://localhost:44322
referer: https://localhost:44322/10
sec-ch-ua: " Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41
x-requested-with: XMLHttpRequest
服务器startup.cs代码
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddResponseCompression(opts =>
{
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapHub<GameHub>("/gameHub");
endpoints.MapFallbackToFile("index.html");
});
}
客户端连接码
HubConnection hubConnection = new HubConnectionBuilder()
.WithUrl(navigationManager.ToAbsoluteUri("/gameHub"))
.Build();
await hubConnection.StartAsync();
我不确定客户端是否在正常工作时发出这些请求。
我更新了所有 nuget 包,尝试使用我能找到的所有解决方案,但没有帮助。
您需要 运行 从服务器项目中获取您的应用程序。默认情况下 visual studio 将客户端项目设置为启动项目,这就是问题所在。
我正在为我几个月前停止工作的项目使用托管的 blazor wasm。但最近我决定改变其中的一些东西,但它不再起作用了。 当我尝试建立 SignalR 连接时,它向 https://localhost:44322/gameHub/negotiate?negotiateVersion=1 地址发出 post 请求,该地址始终是 return 404 代码。 我正在使用 iis express 来托管应用程序。 这是我的第一个 web 和 blazor 项目,所以我不知道应该提供哪些信息。我看到了关于这个问题的不同主题,但我什至不明白人们在那里提交的内容。
从浏览器调试菜单请求信息
Request URL: https://localhost:44322/gameHub/negotiate?negotiateVersion=1
Request Method: POST
Status Code: 404
Remote Address: [::1]:44322
Referrer Policy: strict-origin-when-cross-origin
:authority: localhost:44322
:method: POST
:path: /gameHub/negotiate?negotiateVersion=1
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 0
origin: https://localhost:44322
referer: https://localhost:44322/10
sec-ch-ua: " Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41
x-requested-with: XMLHttpRequest
服务器startup.cs代码
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddResponseCompression(opts =>
{
opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "application/octet-stream" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapHub<GameHub>("/gameHub");
endpoints.MapFallbackToFile("index.html");
});
}
客户端连接码
HubConnection hubConnection = new HubConnectionBuilder()
.WithUrl(navigationManager.ToAbsoluteUri("/gameHub"))
.Build();
await hubConnection.StartAsync();
我不确定客户端是否在正常工作时发出这些请求。 我更新了所有 nuget 包,尝试使用我能找到的所有解决方案,但没有帮助。
您需要 运行 从服务器项目中获取您的应用程序。默认情况下 visual studio 将客户端项目设置为启动项目,这就是问题所在。