AJAX вызов с ASP. NET WebMethod зависает на страницах, пока не будут получены результаты - PullRequest
1 голос
/ 12 июля 2020

У меня есть класс с WebMethod, который выглядит так ...

[Authorize]
public class ControllerNameAjaxController : ControllerNameController
{
    [HttpGet]
    [WebMethod]
    public ActionResult MethodName(string var1, string var2, ...)
    {
        try
        {
            ApplicationDbContext db = new ApplicationDbContext();
            string UserId = User.Identity.GetUserId();
            // and so on to return some results *output -> ResultsObject*
            var converted = JsonConvert.SerializeObject(ResultsObject);
            return new ContentResult { Content = converted, ContentType = "application/json" };
        }
        catch (Exception e)
        {
            //Error
            Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            return Json(new { });
        }
    }
}

, и я вызываю AJAX вот так ...

$.ajax({
    type: "GET",
    url: '/ControllerName/MethodName',
    contentType: "application/json; charset=utf-8",
    data: { var1, var2, ... },
    dataType: "json",
    success: function (data) { },
    error: function (xhr, status, error) {}
});

вот как Мои методы просмотра:

public ActionResult Index()
{
    ViewModel model = new ViewModel();
    return View(model);
}

Теперь вызов работает нормально, но страница зависает, пока WebMethod выполняет задачу. Итак, если пользователь должен был щелкнуть по сайту и go перейти на другую страницу. Они не могут, пока не завершится WebMethod.

Я где-то читал, что это связано с тем, что все это находится в одном потоке, или что он разрешает только один поток за раз. Но не смог понять это после нескольких часов.

Я пробовал использовать await Task.Run(() => ); и изменять атрибуты WebMethod, такие как [WebMethod(EnableSession = false)], из других ответов, которые встречаются.

Я надеялся, что кто-нибудь укажет мне правильное направление или найдет какое-нибудь простое решение этой проблемы.

...