Мне удалось создать рабочую службу и добавить к ней ASP.NET Core API, которая работает нормально. Проблема, с которой я сталкиваюсь, заключается в установке его в качестве службы Windows. Начиная с обновления до .NET 3.0, существует так много критических изменений, особенно с HostBuilder
Ниже мой Program class
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
CreateWebHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostcontext, svc) =>
{
svc.AddHostedService<Worker>();
});
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseKestrel((context, serverOptions) =>
{
serverOptions.ListenAnyIP(1044);
serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(1.5);
});
Когда я запускаю его так, он не может выбратьWebHost Builder, и когда я запускаю только с помощью WebHost Builder, он не может установить службу на конечном сервере.
Пожалуйста, помогите Я хотел бы использовать преимущества IWebHostBuilder
и IHostBuilder
, но я не знаю, как их объединить в методе static main
.
Ниже приведены другиефайлы;
StartUp
public void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services)
{
services.AddHostedService<Worker>();
////Add Controllers
//services.AddTransient<SalesForceDataLoaderController>();
//Add DB Dependency Injection
services.AddAutoMapper(typeof(Startup));
services.AddMvc().AddJsonOptions(options =>
{
options.UseCamelCasing(true);
}).AddControllersAsServices();
services.AddDbContext<SalesForceReportLoaderContext>(options =>
options.UseSqlServer(this.APIdb));
services.AddScoped<IRepositoryWrapper, RepositoryWrapper>();
services.AddScoped<ILogger, Logger<SalesForceDataLoaderController>>();
services.AddScoped<ILogger, Logger<ActisureWhatsAppController>>();
services.AddScoped<ILogger, Logger<PureWhatsAppController>>();
services.AddSingleton(typeof(IRepository<>), typeof(Repository<>));
services.AddSingleton<ISalesforceLoaderRepository, SalesforceLoaderRepository>();
services.AddSingleton<IActWhatsAppClaimStatusRepo, ActWhatsAppClaimStatusRepo>();
services.AddSingleton<IPureWhatsAppClaimStatusRepo, PureWhatsAppClaimStatusRepo>();
services.AddSingleton<IPureWhatsAppPolicyDetailsRepo, PureWhatsAppPolicyDetailsRepo>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
//app.UseRouting();
}
и мои worker class
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
public override Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Service Starting at: {time}", DateTimeOffset.Now);
return base.StartAsync(cancellationToken);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
try
{
//Run a request
}
catch (Exception ex)
{
_logger.LogError(ex.InnerException.ToString());
}
_logger.LogInformation("Salesforce Service running at: {time}", DateTimeOffset.Now);
await Task.Delay(2500, stoppingToken);
}
}
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Service Stop at: {time}", DateTimeOffset.Now);
return base.StopAsync(cancellationToken);
}
public override void Dispose()
{
_logger.LogInformation("Resources released at: {time}", DateTimeOffset.Now);
base.Dispose();
}
}
РЕДАКТИРОВАТЬ
Я теперь установил службу нормально, используя svc
но я получаю эту ошибку
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.