Среда:
- IIS 7.0 в Windows 7 Home
- WebService, написанный на ядре asp.net 2.1
- WebClient, написанный на Angular
- Последняя библиотека signalR (.NET Core и JS)
Проблема:
- Запрос на квитирование не выполнен из-за тайм-аута 15 с.Единственный ответ от сервера
No Connection with that ID
.Но иногда он подключается через 4 мс, что совершенно странно (задержка 10 с между повторными подключениями).
Дополнительная информация:
- IIS isтакже доступен извне (скажем,
www.myapp.domain.com:88/application
, сигнальный концентратор: www.myapp.domain.com:88/application/appHub
), но, похоже, это неактуально, поскольку проблема возникает также при использовании только внутренних IP-адресов. - В IIS любой другой запрос работает правильнои быстро, единственная проблема связана с соединениями signalR.
- Из-за отказа он использует SSE.
- В среде разработки (kestrel) все работает нормально.
- Каждый брандмауэр и т. д.
.Net Core:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyHeader()
.AllowAnyMethod()
.AllowAnyOrigin()
.AllowCredentials();
}));
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(10);
hubOptions.HandshakeTimeout = TimeSpan.FromSeconds(5);
});
services.AddMvc(options =>
{
options.Filters.Add(new ProducesAttribute("application/json"));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddControllersAsServices();
services.AddAuthentication(Configuration);
services.AddAuthorizationPolicies();
return ServiceProviderFactory.CreateAutofacServiceProvider(services, Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseExceptionHandler(env);
app.UseWebSockets();
app.UseHubs();
app.UseMvc();
}
JS:
private buildConnection() {
const connectionBuilder = new HubConnectionBuilder();
this.hubConnection = connectionBuilder
.withUrl(environment.hubUrl, { accessTokenFactory: () => this.accessToken() })
.configureLogging(LogLevel.Trace)
.build();
}
(чувствительныйданные удалены)