[英]Running ASP.NET Core on Worker Service in .NET 3.0
我已经设法构建了一个 Worker Service,并将 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 构建器,而当我只使用 WebHost 构建器运行时,它无法在目标服务器上安装服务。
请协助我想利用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.
我设法解决了这个问题并在我的机器上本地部署了服务; 原来包裹是分开的; Microsoft.AspNetCore.Hosting.WindowsServices
和Microsoft.Extensions.Hosting.WindowsServices
所以我所要做的就是添加 package 并重构program.cs
,如下所示;
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().RunAsService();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName))
.UseStartup<Startup>()
.UseKestrel((context, serverOptions) =>
{
serverOptions.ListenAnyIP(1044);
serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(1.5);
});
有关更多上下文,请参阅此链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.