Forum Discussion
aly2014
Aug 19, 2024Copper Contributor
how to configure asp.net.core ihostservice with global exception handler
hi ,I am developing a windows service under asp.net.core 8 as ihostservice , everything is good , but I want to configure global exception handler , I did look to most article on the net , all of them about just asp.net.core or API , ı just need to iho
5 Replies
- shanewatson5091Copper Contributor
You can set up a try-catch block at the top level in your IHost or implement a custom middleware-like mechanism for services running in the host.
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { services.AddHostedService<MyService>(); services.AddSingleton<IGlobalExceptionHandler, GlobalExceptionHandler>(); }) .Build(); try { await host.RunAsync(); } catch (Exception ex) { var logger = host.Services.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "An unhandled exception occurred in the host."); } } } public class MyService : IHostedService { private readonly ILogger<MyService> _logger; private readonly IGlobalExceptionHandler _exceptionHandler; public MyService(ILogger<MyService> logger, IGlobalExceptionHandler exceptionHandler) { _logger = logger; _exceptionHandler = exceptionHandler; } public async Task StartAsync(CancellationToken cancellationToken) { try { _logger.LogInformation("Service is starting..."); // Simulate work throw new InvalidOperationException("Simulated exception in service."); } catch (Exception ex) { _exceptionHandler.HandleException(ex); } } public Task StopAsync(CancellationToken cancellationToken) { _logger.LogInformation("Service is stopping..."); return Task.CompletedTask; } } public interface IGlobalExceptionHandler { void HandleException(Exception ex); } public class GlobalExceptionHandler : IGlobalExceptionHandler { private readonly ILogger<GlobalExceptionHandler> _logger; public GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) { _logger = logger; } public void HandleException(Exception ex) { // Log or take other appropriate actions _logger.LogError(ex, "An exception occurred."); } }
- Abhishek_KhatriBrass ContributorHi Have you tried IhostSevice in the main program ?
with register a custom global exception handler ?- aly2014Copper Contributorihostservice is working good and also register custome exception handler , but its not calling on exception ,my ihostservice not use any http request or respond , we just use for listen to a database and logging
- Abhishek_KhatriBrass ContributorThis is window service ? Right