Подключение SignalR в некоторых случаях занимает очень много времени.C#

Место общения программистов C#
Anonymous
Подключение SignalR в некоторых случаях занимает очень много времени.

Сообщение Anonymous »

У меня есть серверная часть asp net core и внешний интерфейс wpf.
Когда я запускаю серверную часть на локальном хосте (по https), все работает нормально, и соединение SignalR устанавливается очень быстро. Но когда я меняю IP-адрес серверной части на свой локальный IP-адрес (я меняю его в файле launchSettings.json), установление этого соединения занимает очень много времени (странно то, что это всегда занимает 120 секунд с разницей всего в несколько миллисекунд). Кроме того, обычные вызовы API к моему бэкэнду по-прежнему очень быстры и работают должным образом.
Что еще странно, так это то, что когда я не использую свое промежуточное программное обеспечение (я закомментировал его), тогда все работает как обычно, и соединение снова быстрое, но мне не нужно этого делать при работе на локальном хосте! (промежуточное ПО осуществляет некоторый доступ к БД и использует dbcontext, но я добавил его в область действия, чтобы это не было проблемой?)
Я также только что обнаружил, что оно прекрасно работает по моему локальному IP-адресу и http но не использую https
в моем клиенте, я игнорирую SSL-сертификат следующим образом:

var handler = new HttpClientHandler
{
UseDefaultCredentials = true,
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
{
try
{
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
};

Здесь я добавляю MiddleWare:
builder.Services.AddDbContext(options =>
{
options.UseSqlServer(connectionString);
});
...
builder.Services.AddScoped();
...
app.UseMiddleware();

Возможно, также важно знать, что я использую свой DBcontext как в своем LoggerMiddleware, так и в своем хабе для SignalR, но я добавил его с ограниченной областью действия, поэтому это не должно быть проблемой (и я не получите из-за этого ошибку)
Я также пробовал разные порты
Временное исправление:
в моем LoggerMiddleware я использую httpcontext
Процессу переговоров signalR это совсем не нравится
Мое временное исправление — это if в моем InvokeAsync в промежуточном программном обеспечении:
if (context.Request.Path.StartsWithSegments("/keystream"))//keystream is the route of my hub
{
await _next(context);
return;
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... some-cases

Вернуться в «C#»