Я пытаюсь разместить удаленный концентратор SignalR. Я создал веб-приложение api. NET core 3.1, в котором у меня есть следующий код в моем классе Startup.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(options => options.AddPolicy("CorsPolicy",
builder =>
{
builder
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin();
}));
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseStaticFiles();
app.UseCors("CorsPolicy");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<KappHub>("/myHub");
});
}
CORS должен быть включен, чтобы принимать все источники. В этом проекте я создал файл stati c index. html.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<h1>Kapp Folc Local Tester</h1>
<script src="js/signalr/dist/browser/signalr.js"></script>
<script>
var connection = new signalR.HubConnectionBuilder().withUrl("/myHub").build();
connection.start().then(function () {
console.log('OK');
}).catch(function (err) {
console.log(err);
});
</script>
</body>
</html>
Это отлично работает! когда я погружаюсь в инструменты разработчика, я вижу, что моя веб-страница отправляется по адресу https://localhost: 5001 / myHub /gotiate ?gotiateVersion = 1 , и я получаю ответ 200. SignalR здесь отлично работает!
Когда я использую почтальон или любой другой клиент REST для отправки на https://localhost: 5001 / myHub /gotiate ?gotiateVersion = 1 , он работает нормально, и я получаю ответ.
Теперь я создаю второй проект. NET core web api, который также содержит файл stati c index. html вместе со скриптом signalr. js. Однако в этом проекте не размещается SignalRhub, но вместо этого я пытаюсь подключиться к концентратору signalR из моего первого проекта. Индекс. html является точной копией html из моего первого проекта, но со строкой подключения к концентратору signalR из моего первого проекта. Это выглядит так:
var connection = new signalR.HubConnectionBuilder().withUrl("https://localhost:5101/myHub").build();
Запуск в моем втором проекте выглядит так:
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseStaticFiles();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Когда я запускаю этот проект, я перехожу к индексу. html из моего Во втором проекте он не может подключиться к концентратору signalR из моего первого проекта. В инструментах разработчика я получаю статус «(сбой) net :: ERR_FAILED» без какой-либо другой информации.
В приведенных выше примерах используется SSL (https). Также при запуске обоих решений в режиме http возникает та же проблема.