我目前有一个与ASP.NET Core 3.1一起运行的大型控制台应用程序。我现在的任务是使它作为窗口服务在我们的一台服务器上进行工作。我已经准备就绪,可以在服务器本身上将其作为服务运行,但是我目前停留的一件事是如何在代码中实际更改它,以使其在服务中运行而不破坏它。
我已经发现一对夫妇教程像这样那些解释如何运行一个控制台应用程序作为一种服务,但是所有的人,我发现从一个新的项目开始。我的问题是我当前的项目已经写好了。我要寻求帮助的主要问题是,如何使我的项目作为Windows服务工作,同时还要保留startup.cs中当前的功能。对于上下文,这是我当前的startup.cs和program.cs:
启动文件
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSignalR();
services.AddTransient<SharePointUploader>();
services.AddTransient<FileUploadService>();
services.AddSingleton<UploaderHub>();
//services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
services.AddAuthorization();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHttpsRedirection();
}
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<UploaderHub>("/uploadHub");
});
}
}
Program.cs
public class Program
{
public static void Main(string[] args)
{
var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
CreateHostBuilder(args).Build().Run();
}
catch (Exception exception)
{
//NLog: catch setup errors
logger.Error(exception, "Stopped program because of exception");
throw;
}
finally
{
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
NLog.LogManager.Shutdown();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog();
}
我真的不明白当作为Windows服务运行时应该如何工作(基于上面链接的教程)。任何帮助将不胜感激。
在问了几个小时后,当我解决该问题时,我忘了回答这个问题,但是您可以在Host.CreateDefaultBuilder(args)行中添加“ .UseWindowsService()”。例如:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService() //<==== THIS LINE
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句