Я использую серверное приложение на базе Kestrel с ASP. net core 2.1. У меня есть специальное промежуточное программное обеспечение для обработки ошибок, например:
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context /* other dependencies */)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private static Task HandleExceptionAsync(HttpContext context, Exception exception)
{
Log.Warning(exception,"Exception occurred: {exception}",exception);
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
var result = JsonConvert.SerializeObject(new { error = exception.Message });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}
Кажется, что оно работает в 99% случаев, но каждый сейчас, а затем процесс сервера останавливается, и я вижу некоторое исключение в качестве последней зарегистрированной записи , К сожалению, мне не удалось воспроизвести это на моей машине для разработки, это появляется только в производственной системе. В моем понимании это не должно происходить ни в коем случае.
Могут ли быть какие-либо известные ошибки, которые я мог бы сделать, чтобы сервер остановился? Что-нибудь, что я мог бы включить для диагностики?
Трассировки стека зарегистрированных исключений обычно указывают на некоторую проблему с вводом или вещами, о которых я хотел бы сообщить, используя ErrorHandlingMiddleware
.