#asp.net-core #signalr
Вопрос:
Когда я пытаюсь подключиться к концентратору SignalR HandleAuthenticateAsync()
, метод в AuthenticationHandler
нем вызывается дважды клиентом .net и 3 раза другим клиентом.
Но когда я вызываю метод http, обработчик вызывается только один раз.
это мое ConfigureServices()
в Startup
services.AddAuthentication(FbigAuthenticationHandler.PROVIDER_NAME)
.AddScheme<FbigAuthenticationSchemeOptions, FbigAuthenticationHandler>(FbigAuthenticationHandler.PROVIDER_NAME, null);
services.AddCors();
services.AddControllers();
services.AddSignalR(options =>
{
options.AddFilter<BadUserInputFilter>();
options.ClientTimeoutInterval = TimeSpan.FromHours(1); //change this in production
});
services.AddHangfire(configuration =>
{
configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseMemoryStorage()
.WithJobExpirationTimeout(TimeSpan.FromHours(3))
.UseDefaultTypeSerializer();
});
services.AddHangfireServer();
и Configure()
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
);
app.UseAuthentication();
app.UseRouting();
app.UseEndpoints(endpoint => endpoint.MapHub<MasterHub>("/connect"));
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
Ответ №1:
По умолчанию SignalR выполняет минимум 2 запроса, один для /<hubname>/negotiate
конечной точки, а другой для /<hubname>
конечной точки. Чтобы иметь только один запрос, вы можете указать WebSockets и пропустить согласование в параметрах клиента. (Предостережение заключается в том, что среды без websockets не будут работать, и вы не сможете использовать службу Azure SignalR)
Комментарии:
1. Сейчас я пропускаю мимо клиента, но что, если я захочу договориться, будет ли нормально вернуть AuthenticateResult. Успех(билет), когда я нахожу его запросом на переговоры? потому что я не могу обрабатывать аутентификацию дважды, когда она обращается к другому api для проверки токена один раз