Задержка маршрутизации промежуточного программного обеспечения ядра Asp.net между запросом и действием - PullRequest
1 голос
/ 12 марта 2019

Я работаю над остальным API .net core 2.0, нагрузка JSON которого составляет около 1 МБ.При проверке журналов обнаруживается огромная задержка между вызовом метода запроса к действию.

Журналы:

20: 05: 12.7247 | 1 | INFO | Microsoft.AspNetCore.Hosting.Internal.WebHost | Запрос на запуск HTTP / 1.1 POST

20: 05: 12.7514 || INFO | Service.RequestLoggingMiddleware | Запрос промежуточного программного обеспечения получен в 2019-03-12 20: 05: 12.725
20: 05: 15.2839 | 1 | INFO | Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker | Метод выполнения действия

Задержка около 2 секундЗапрос получен и направлен на соответствующее действие.Я добавил только провайдера Nlog, пользовательское промежуточное программное обеспечение для регистрации запросов и mvc в конвейере промежуточного программного обеспечения.

Настраиваемое время регистрации запроса промежуточного программного обеспечения:

 public class RequestLoggingMiddleware
 {
    private readonly RequestDelegate requestDelegate;
    private ILogger<RequestLoggingMiddleware> logger;
    public RequestLoggingMiddleware(RequestDelegate _requestDelegate,ILogger<RequestLoggingMiddleware> _logger)
    {
        requestDelegate = _requestDelegate;
        logger = _logger;
    }

    public async Task Invoke(HttpContext context)
    {
        try {


            string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff",CultureInfo.InvariantCulture);
            logger.LogInformation("Middleware Request recieved at {0}", timestamp);

            await requestDelegate.Invoke(context);
        }
        catch { }
    }


}

Настроенный конвейер промежуточного программного обеспечения:

    public void Configure(IApplicationBuilder app, IHostingEnvironment 
     env,ILoggerFactory loggerFactory)

        {

         if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        env.ConfigureNLog("nlog.config");
        loggerFactory.AddNLog();
        app.AddNLogWeb();
        app.UseMiddleware<RequestLoggingMiddleware>();
        app.UseMvc();
       }

Редактировать: Я считаю, что задержка пропорциональна размеру полезной нагрузки Json.

 public SampleController(ILogger<GroupsValidation1Controller> _logger)
 {
        logger = _logger;
 }

       [HttpPost]
 public   IActionResult Validate([FromBody]JObject inputValue)
 {
      logger.LogInformation(" method starts ");
    ///controllerlogic
     logger.LogInformation(" method ends");
 }

Почему промежуточное ПО .Net Core MVC отнимает столько времени?Есть ли способ уменьшить задержку, затрачиваемую в промежуточном программном обеспечении?
Я также считаю, что весь запрос также регистрируется, хотя он не настроен.Я не уверен, что регистрация всего запроса занимает время.Есть ли способ отключить его?

1 Ответ

0 голосов
/ 15 марта 2019

Я понял, что вся задержка происходит в привязке модели.Так как размер полезной нагрузки Json велик, привязка модели к типу задания занимает много времени.Пропуская привязку модели и читая необработанное тело запроса или используя пользовательскую модель вместо задания, я могу уменьшить задержку и улучшить производительность API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...