Я работаю над остальным 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 отнимает столько времени?Есть ли способ уменьшить задержку, затрачиваемую в промежуточном программном обеспечении?
Я также считаю, что весь запрос также регистрируется, хотя он не настроен.Я не уверен, что регистрация всего запроса занимает время.Есть ли способ отключить его?