У меня есть проект ASP.NET Core MVC, когда я внедряю и пробую с другим человеком, сайт зависает и время ожидания.
Когда мы начали проект, мы создали контроллер MVC, и все работало нормально. Затем нам потребовалось несколько источников данных для фронта, и мы включили методы «API» (обратите внимание на кавычки) в тот же контроллер MVC. И тогда начинают появляться проблемы.
Недавно мы развернули проект в производстве, я попросил кого-нибудь помочь мне протестировать и найти ошибки. Мы подключаемся, и когда мы загружаем домашнюю страницу, JS API вызывает тайм-аут. Сначала я подозревал, что сервисные вызовы выполняются веб-бэкендом, но после некоторой отладки дело не в этом.
Нечеткая вещь локальная (и одна), все работает без нареканий. Поэтому мне нужно было углубиться в тестирование, я попросил другого тестировщика загрузить дом одновременно со мной, с другой стороны, я запускаю Postman для вызова конечной точки «API» веб-сайта. Представление отрисовывается идеально, и JS вызывает API и время ожидания истекает через 15 секунд, а в Postman запрос никогда не находит ответа.
Заключение и время для вопросов: я обнаружил, что вызовы API кажутся заблокированными, когда несколько соединенийиспользовать контроллер. После нескольких поисков в Google я обнаружил, что в ASP.NET Core 2.x MVC и API не расширяют один и тот же базовый код, MVC расширяет Controller, потому что он поддерживает Views, а API расширяет ControllerBase, который аналогичен Controller без поддержки Views. И многие люди говорят, что контроллеры MVC и API должны быть двумя разными контроллерами.
Но это не решает мою основную проблему, почему вызовы API в контроллере MVC прерываются, когда веб-сайт используют более одного пользователя? И почему контроллер MVC не может обрабатывать конечные точки API? Это из-за представлений?
Надеюсь, я ясно дал понять, потому что мне хотелось бы получить ответ, кроме того, чтобы применить то, что говорят люди (и документацию, я думаю).
Править: здесь пример того, что это сейчас
public FooController : Controller
{
[HttpGet]
public IActionResult Index()
{
return View();
}
[HttpGet]
public IActionResult GetData()
{
return StatusCode(200, new { value = 1 });
}
}
Индекс отображается правильно и время ожидания вызова https://example.com/Foo/GetData или никогда не находите ответ, когда более чем один пользователь использует сайт.
Конфигурация маршрута:
applicationBuilder.UseMvc(routes =>
{
routes.MapRoute(name: "cultureRoute",
template: "{culture}/{controller}/{action}/{id?}",
defaults: new { controller = "Logon", action = "Index" },
constraints: new
{
culture = new RegexRouteConstraint("^[a-z]{2}(?:-[A-Z]{2})?$")
});
routes.MapRoute(name: "default", template: "/{controller=Logon}/{action=Index}/{id?}");
});
1 день спустя, я обнаружил причину проблемы, мы используем SignalR для синхронизации данных между пользователями, по неизвестной причине, когда я отключаю SignalR, все работает на любом подключенном пользователе,Итак, как SignalR может блокировать все запросы к API в определенный момент?