Asp.net核心中间件路由请求和动作之间的延迟

问题描述 投票:1回答:1

我正在开发一个休息API .net核心2.0,它占用大约1MB的JSON有效负载。在检查日志时,我发现请求操作方法调用之间存在很大的延迟。

日志:

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中间件花了这么多时间?有没有办法减少中间件的延迟? 我还发现虽然没有配置整个请求,但也会记录。我不确定记录整个请求是否需要时间。有没有办法禁用它?

c# .net api asp.net-core middleware
1个回答
0
投票

我认为整个延迟发生在模型绑定中。由于Json有效负载大小很大,因此模型绑定到jobject类型需要时间。跳过模型绑定和读取原始请求正文或使用自定义模型而不是jobject,我能够减少延迟并提高api的性能。

© www.soinside.com 2019 - 2024. All rights reserved.